Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: Создание пустого файла 
Author Message
_Johm



PostPosted: Tue Sep 21, 2010 16:39    Post subject: Reply with quote

Этот пост меня вдохновил, наконец то. Искал реализацию автосоздания txt'шника по имени, но как обычно свои мысли, свои задумки по функционалу. Может кому-нибудь пригодится.

Code:

Option Explicit
Dim Dict : Set Dict = CreateObject("Scripting.Dictionary") : Dict.CompareMode = vbTextCompare
Dim Editor, Ext, ShowMemo, DefaultNoname, WinAssociation, OpenNewFile, Divider, DontOpen
'============================================================================================
' Имя: Новый файл по SHIFT+F4
' Параметры: ""%P%N""
'
'Использование (ввод в InputBox):
'[имя файла][пробел][?сокращение редактора]
'
'РЕДАКТОРЫ:
'первый параметр - сокращение редактора
'второй параметр - путь к редактору[[пробел]/расширение]
'   здесь расширение создаваемого файла
'   т.е, если в InputBox ввести "filename ?сокращение редактора", то получим
'   файл "filename.расширение
'
'Так же работет явное указание расширения (условие - неравенство имени
'файла/папки под курсором и введенного имени до ?, не зависит от регистра)
'
'Знак вопроса можно заменить на другой разделитель в конфигурации (параметр Divider)
'============================================================================================

'=========Конфигурация========
'РЕДАКТОРЫ
Dict.Add "default", ""
'--------
Dict.Add "np", "%SystemRoot%\Notepad.exe"
Dict.Add "em", "%COMMANDER_PATH%\PROGS\OFFICE\emed32 10.0.0\EmEditor.exe"
Dict.Add "++", "%COMMANDER_PATH%\PROGS\OFFICE\notepadpp\notepad+1+.exe"
Dict.Add "ps", "%ProgramFiles%\Adobe\Photoshop CS\Photoshop.exe /psd"
Dict.Add "aud", "%ProgramFiles%\Adobe\Adobe Audition 3.0\Audition.exe /wav"
'Dict.Add
'Dict.Add

'Редактор по умолчанию
Editor = "em"
'Расширение по умочланию
Ext = "txt"
'Показывать памятку
ShowMemo = False
'Имя файла при пустом вводе
DefaultNoname = "Untitled"
'использовать системные ассоциации (не учитывать расширения в Dict)
WinAssociation = False
'Открывать созданный файл
OpenNewFile = True
'Управляющий символ
Divider = "/"
DontOpen = "-" 'если ввести последним, то файл только создается
'================================

Dim FSO, WS, Memo, arg1, FilePath, FileName, Resp, STR

Set FSO = CreateObject("Scripting.FileSystemObject")
Set WS = WScript.CreateObject("WScript.Shell")

Dim i, DictKeys : DictKeys = Dict.Keys
If Dict.Count < 2 Then
   WinAssociation = True
Else
   If Dict.Count = 2 Then
      Dict.Item("default") = Trim(Split(Dict.Item(DictKeys(1)),"/")(0))
   ElseIf Dict.Exists(Editor) Then
      Dict.Item("default") = Trim(Split(Dict.Item(Editor),"/")(0))
   End If
   Editor = Dict.Item("default")
End If

If ShowMemo Then
   AssembleMemo()
Else
   If Dict.Count > 1 Then Memo = vbCrLf & "для справки введите " & Divider & "memo" & vbCrLf
End If

'определяем путь и имя без расширения от файла/папки под курсором
If WScript.Arguments.Count = 1 Then
   arg1 = WScript.Arguments(0)
Else
   MsgBox "Неверно количество аргументов", vbExclamation, "Создание файла"
   Quit
End If

If Right(arg1,1) = "\" Then
   FileName = ""
   FilePath = arg1
Else
   FileName = FSO.GetBaseName(arg1)
   FilePath = FSO.GetParentFolderName(arg1)
   If Not Right(FilePath, 1) = "\" Then FilePath = FilePath & "\"
End If

'ввод пользователя (если используется разделитель(напрмер ?) и указано несуществующее
'сокращение редактора то цикл
STR = FileName
Dim str1, str2, editor1, str3, str4
str3 = "системная ассоциация"
arg1 = True 'как флаг
Do Until UserInput(STR) : : Loop
If OpenNewFile Then
   On Error Resume Next
   If WinAssociation Then
      WS.Run Chr(34) & Resp & Chr(34)
      If err Then   MsgBox "Нет программы" & vbCrLf & _
      "ассоциированной с расширением:" & vbCrLf & _
      str2, vbExclamation, "Cоздание файла"
   ElseIf FSO.FileExists(WS.ExpandEnvironmentStrings(Editor)) Then
      WS.Run Chr(34) & Editor & Chr(34) & " " & Chr(34) & Resp & Chr(34)
      If err Then   MsgBox "Неизвестная ошибка" , vbExclamation, "Cоздание файла"
   Else
      MsgBox "Не найден редактор:" & vbCrLf & _
      Editor, _
      vbExclamation, _
      "Создание файла"
   End If
   On Error Goto 0
End If
Quit

Sub AssembleMemo
   ''собираем памятку-таблицу для InputBox (сокращение   exe'шник редактора)
   If Dict.Count > 1 Then
      For i = 1 To Dict.Count -1
         Memo = Memo & DictKeys(i) & Chr(9) & FSO.GetBaseName(Dict.Item(DictKeys(i))) & vbCrLf
      Next
      Memo = vbCrLf & "(filename.ext " & Divider & "alias)" & vbCrLf & Memo
   End If
End Sub

Function UserInput(Byref def_)
   UserInput = False
   If Not WinAssociation AND Dict.Count > 1 Then str3 = FSO.GetBaseName(Dict.Item("default"))
   Resp = InputBox(   "Введите имя создаваемого файла ." & Ext & ":" & vbCrlf & _
                  "редактор: " & str3 & vbCrlf & _
                  Memo, _
                  "Создание файла", _
                  def_)
   If IsEmpty(Resp) Then Quit
   
   If LCase(Resp) = Divider & "memo" Then
      Memo = ""
      AssembleMemo()
      WinAssociation = False
      Exit Function
   End If
   If Right(Resp, 1) = DontOpen Then
      OpenNewFile = False
      Resp = Left(Resp,Len(Resp)-1)
   End If
   If InStr(Resp, Divider) Then
         Dim resp1
         str1 = Split(Resp, Divider, 2)
         resp1 = Trim(str1(0))
         If (Dict.Count > 1) Then
            WinAssociation = False
            editor1 = Trim(str1(1))
            If Dict.Exists(editor1) Then
               str2 = Dict.Item(editor1)
               If InStr(str2, Divider) Then
                  str1 = Split(str2, "/", 2)
                  Editor = Trim(str1(0))
                  Ext = LCase(str1(1))
               Else
                  Editor = str2
               End If
               arg1 = False
            Else
               STR = Resp
               Exit Function
            End If
         Else
            Exit Function
         End If
         Resp = resp1
   End If
   
   If Len(Resp) = 0 Then
      'FilePath = WS.SpecialFolders("MyDocuments") & "\"
      FileName = DefaultNoname
   ElseIf Resp = FileName Then
      'do nothing
   Else
      If Not LCase(Resp) = LCase(FileName) Then
         str2 = FSO.GetExtensionName(Resp)
         If Not Len(str2) = 0 Then
            Ext = ""
            If (Not WinAssociation) AND arg1 AND (Dict.Count > 1) Then
               Dim i, DictKeys
               DictKeys = Dict.Keys
               For i = 1 To Dict.Count -1
                  editor1 = Dict.Item(DictKeys(i))
                  If InStr(editor1, Divider) Then
                     str1 = Split(editor1, "/", 2)
                     If LCase(str2) = Trim(LCase(str1(1))) Then
                        Editor = Trim(str1(0))
                        Exit For
                     End If
                  End If   
               Next
            End If
         End If
      End If
      FileName = Resp
   End If
   If Not Len(Ext) = 0 Then Ext = "." & Ext
   str4 = Resp
   Resp = FilePath & FileName & Ext
   If Not FSO.FileExists(Resp) Then
      On Error Resume Next
         FSO.CreateTextFile(Resp)
         If err Then   
            MsgBox "Ошибка создания файла", _
            vbExclamation, _
            "Cоздание файла"
            UserInput = False
            STR = str4
            Exit Function
         End If
      On Error Goto 0
   End If
   UserInput = True
End Function

Sub Quit
   Set FSO = Nothing
   Set WS = Nothing
   Set Dict = Nothing
   WScript.Quit
End Sub


Только не пойму, диалог нового файла в Photoshop CS всплывает, но при нажатии на Ok выдает Could not complete your request because of a program error.
Audition новый файл создает нормально.


Last edited by _Johm on Wed Sep 22, 2010 21:01; edited 14 times in total
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group