View previous topic :: View next topic |
Author |
Message |
HEXFIX
Joined: 25 Jun 2010 Posts: 173 Location: Калининград
|
(Separately) Posted: Sat Feb 04, 2012 11:08 Post subject: |
|
|
Всем доброго времени суток.
Если уже было, сильно не ругайте - честно искал, но не нашёл.
Есть скрипт, по-моему от Batya, который создаёт файл с заданным именем с содержимым буфера обмена.
Можно ли его модифицировать таким образом, чтобы после создания файл сразу же открывался в редакторе (я использую AkelPad)? |
|
Back to top |
|
|
Avada
Joined: 01 Aug 2008 Posts: 10315 Location: Россия, Саратов
|
(Separately) Posted: Sat Feb 04, 2012 11:20 Post subject: |
|
|
HEXFIX
Безотносительно к технической стороне вопроса: уже много раз говорено (в том числе в правилах и памятке), что оверквотинг на форуме запрещён. На существующие скрипты надо давать ссылки. Выносится замечание, код заменяется ссылкой. _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Thu Feb 09, 2012 01:30 Post subject: |
|
|
HEXFIX
Забыл про просьбу. Правильней было бы использовать этот скрипт. Но я пользуюсь своим:
Code: | ' Создать файл с текстом буфера обмена (при наличии) и открыть его в редакторе
' Параметры: "%P" "<путь к редактору>"
'===================================================================================
P = WScript.Arguments(0) : Ed = WScript.Arguments(1)
Set FSO = CreateObject("Scripting.FileSystemObject")
Dim WSH : Set WSH = CreateObject("WScript.Shell")
R = "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3\1407"
A = WSH.RegRead(R)
If A > 0 Then WSH.RegWrite R, 0, "REG_DWORD"
Clip = CreateObject("htmlfile").ParentWindow.ClipboardData.GetData("text")
If A > 0 Then WSH.RegWrite R, A, "REG_DWORD"
If Trim(Clip) = "" Then Quit
File = FSO.GetBaseName(FSO.GetTempName) & ".txt"
FSO.OpenTextFile(P & File, 2, True).Write Clip : WSH.Exec(Ed & " " & File) : Quit
Function Quit : Set WSH = Nothing : Set FSO = Nothing : WScript.Quit : End Function |
|
|
Back to top |
|
|
Tol!k
Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Thu Feb 09, 2012 02:12 Post subject: |
|
|
Улыбнуло. Я сперва хотел тоже предложить эту кнопку, потом, увидев утилиту, подклейку даты и отсутствие указания нужного редактора, передумал.. |
|
Back to top |
|
|
Victor_Dobrov
Joined: 15 Jul 2008 Posts: 50
|
(Separately) Posted: Fri Feb 10, 2012 17:15 Post subject: |
|
|
Предлагаю скрипт переключения x32 <> x64 версий TC по клику на тексте 32 (или 64) за пунктом "Справка" (или последним в меню)
Code: | ' Перезапуск x32 <> x64. Закрыть 32-битный и запустить TC x64 (и наоборот). Для x86 только рестарт TC
' сохраните код в файл (напр. 1.vbs), скопируйте в папку (напр. %commander_path%\scripts) и запустите
' скрипт переименуется в SwitchTC32or64.vbs (можно изменить), в UserCmd.ini добавится эта команда,
' в меню добавляется последний пункт (32/64), который перезапускает TC с другой разрядностью
em_cmd = "SwitchTC32or64" 'имя скрипта и em_команды, можно изменить
Set WshShell = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
commander_PATH = ExpStr("%COMMANDER_PATH%",0) : commander_INI = ExpStr("%COMMANDER_INI%",0)
Set TCS = CreateObject("TCScript.Helper")
If not IsObject(TCS) Then MsgBox "Script Helper ActiveX for Total Commander" & vbTab & VbCr & VbCr & "для регистрации в системе выполните:" & VbCr & "TCWSHelp.exe /REGSERVER",vbSystemModal + vbInformation,"Отсутствует компонент ActiveX" : WScript.Quit
If not TCS.IsRunningTC Then WScript.Quit 'скрипт запущен не из ТС
Set File = FSO.GetFile(WScript.ScriptFullName)
if FSO.GetBaseName(File) <> em_cmd then File.Name = em_cmd & ".vbs"
UserCmd = ExpStr(commander_INI,1) & "UserCmd.ini"
if FSO.FileExists(UserCmd) then txt = CleanLF(FSO.OpenTextFile(UserCmd,1).ReadAll) & vbNewLine else txt = ""
If InStr(txt, "em_" & em_cmd) = 0 Then FSO.OpenTextFile(UserCmd, 2,1).Write txt & "[em_" & em_cmd & "]" & vbNewLine & "cmd=" & ExpStr(WScript.ScriptFullName,1) & em_cmd & ".vbs"
Menu = commander_PATH & "\Language\" & TCS.INIRead(commander_INI,"Configuration","Mainmenu","wcmd_eng.mnu")
x64 = (ExpStr("%PROCESSOR_ARCHITEW6432%",0) = "AMD64" or ExpStr("%PROCESSOR_ARCHITECTURE%",0) = "AMD64")
str32 = "MENUITEM ""32"", em_" & em_cmd : str64 = "MENUITEM ""64"", em_" & em_cmd : exe = commander_PATH & "\totalcmd.exe"
if LCase(ExpStr(ExpStr("%COMMANDER_EXE%",0),2)) = "totalcmd64.exe" Then Mode = 64 Else Mode = 32
If Mode = 32 then if x64 then exe = commander_PATH & "\totalcmd64.exe" else str64 = str32
txt = CleanLF(FSO.OpenTextFile(Menu, 1).ReadAll) : res = txt
If InStr(txt, "em_" & em_cmd) > 0 Then
if Mode = 32 Then
If not InStr(txt, str64) > 0 Then res = Replace(txt, str32, str64,1,-1,1)
else
If not InStr(txt, str32) > 0 Then res = Replace(txt, str64, str32,1,-1,1)
end If
Else
If Mode = 32 Then res = txt & vbNewLine & str64 Else res = txt & vbNewLine & str32
End If
if res <> txt Then FSO.OpenTextFile(Menu, 2).Write res
Do While TCS.IsRunningTC
TCS.SendCommand "cm_Exit": WScript.Sleep 100 : n = n + 1
If n > 200 Then Exit Do
Loop
WshShell.Run (exe & " /i=" & commander_INI)
WScript.Quit
Function ExpStr(str, n) 'Раскрыть системные переменные, выделить имя файла или папки
if n = 1 then ExpStr = FSO.GetParentFolderName(str) & "\" else if n = 2 then ExpStr = FSO.GetFileName(str) else if n = 3 then ExpStr = FSO.GetBaseName(str) else ExpStr = WshShell.ExpandEnvironmentStrings(str)
End Function
Function CleanLF(AllText) 'Удаление лишних пустых строк в конце текста
Do While (Right(AllText, Len(vbNewLine)) = vbNewLine)
AllText = Left(AllText, Len(AllText) - Len(vbNewLine))
Loop
CleanLF = AllText
End Function |
Last edited by Victor_Dobrov on Sat Feb 11, 2012 10:16; edited 4 times in total |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Feb 11, 2012 03:54 Post subject: |
|
|
Victor_Dobrov
Что-то наворочено много и не по делу. Хелпер с регистрацией тут вообще не нужен. Меню почему-то берётся именно английское (русскому пользователю автор об этом сообщить не захотел почему-то), а по логике должно читаться из ключа Mainmenu. Проверку запущенности TC вполне можно опустить при замене.
Строчку с %PROCESSOR_ARCHITEW6432% я вообще не понял. Я обычно разрядность через WMI определяю. Почему сравнивается имя exe-шника именно в верхнем регистре мне совсем непонятно, как и то, почему не учтён исключение с другим именем. Я пришёл к выводу, что проверку нужно делать только по размеру (InternalName не берём). Функция Quote бесполезная. Зачем вообще проверять, есть кавычки или нет, если можно сразу их ставить? Навязывание расположения файла(ов) быть не должно. Лучше просто сделать подписи, где и что менять, этого как правило достаточно. Зачем для переменной em_Name писать отдельно функцию не уловил. Почему написано, что пункт добавляется после меню "Справка" (которой может и не быть), когда оно там совсем никак не идентифицируется?
Скрипт больше тянет на сборочный или для себя. Выкладывание его в паблик преждевременное.
Last edited by Flasher on Sat Feb 11, 2012 04:58; edited 2 times in total |
|
Back to top |
|
|
Victor_Dobrov
Joined: 15 Jul 2008 Posts: 50
|
(Separately) Posted: Sat Feb 11, 2012 04:17 Post subject: |
|
|
Flasher wrote: | Victor_Dobrov
Меню почему-то берётся именно английское, а по логике должно читаться из ключа Mainmenu. Строчку с %PROCESSOR_ARCHITEW6432% я вообще не понял. |
TCS.INIRead(COMMANDER_INI,"Configuration","Mainmenu") - эту строку не заметили?
%PROCESSOR_ARCHITEW6432% - при запуске из под TC x32 определяет, что система - x64.
Не нравится Helper, посоветуйте, как использовать TCFS2
Скрипт делал на случай, если заголовок окна скрыт. Лучше бы ответили, работает ли скрипт, пункт "32" появляется в конце меню?
Quote: | Выкладывание его в паблик преждевременное. | С таким подходом здесь половину скриптов убрать надо. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Feb 11, 2012 04:32 Post subject: |
|
|
Victor_Dobrov wrote: | TCS.INIRead(COMMANDER_INI,"Configuration","Mainmenu") - эту строку не заметили? | В этой строке как раз и стоит wcmd_eng.mnu.
Victor_Dobrov wrote: | %PROCESSOR_ARCHITEW6432% - при запуске из под TC x32 определяет, что система - x64. | Там есть некоторые аспекты, касаемые этой переменной, которые не всегда показывают верный результат. Мы их тут разбирали. К тому же переменная может существовать не по желанию системы, а по желанию пользователя, что и вызовит проблемы. Если надо, могу подсказать как легко получать архитектуру через WMI.
Victor_Dobrov wrote: | Не нравится Helper, посоветуйте, как использовать TCFS2 | В TCFS2 есть функции для работы с ini-файлами. Они описаны в справке.
Victor_Dobrov wrote: | С таким подходом здесь половину скриптов убрать надо. | Не согласен. Половиной никак не пахнет. Да и если скрипт пишется кому-то, то проблемы решаются по ходу поступления и тестирования, а если скрипт выкладывается самостоятельно как окончательный (без предупреждения о возможных багах), то это не есть хорошо. Я, например, скрипт обновления ТС сразу выкладывать побоялся, понимая, что могут быть подводные камни. Добрые люди помогли в тестах и работе над исключениями, за что я им благодарен. Если бы я скрипт выложил раньше времени, то тут многим нервы точно подпортил. |
|
Back to top |
|
|
Victor_Dobrov
Joined: 15 Jul 2008 Posts: 50
|
(Separately) Posted: Sat Feb 11, 2012 04:44 Post subject: |
|
|
Quote: | В этой строке как раз и стоит wcmd_eng.mnu. | но это значение по-умолчанию, читается именно то, что установил пользователь.
Quote: | Если надо, могу подскать как легко получать архитектуру через WMI | не надо, также работает не всегда и слишком тормозит.
Я не совсем понял, вы просите убрать скрипт? Если да, я это сделаю. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Feb 11, 2012 04:48 Post subject: |
|
|
Victor_Dobrov wrote: | но это значение по-умолчанию, читается именно то, что установил пользователь. | По умолчанию, если на этапе установки был выбран английский.
Victor_Dobrov wrote: | не надо, также работает не всегда и слишком тормозит. | Т.е. "не всегда"? У меня нигде проблем не было (и не только у меня). Да, скорость несколько ниже (тормоза в основном возникают при использовании общей маски (*), что легко обходится), но зато сам способ точно надёжнее. А когда речь о перезапуске, то там вообще этот момент незаметен.
Victor_Dobrov wrote: | Я не совсем понял, вы просите убрать скрипт? Если да, я это сделаю. | Ни в коем случае. Раз обсуждение завелось, то удаление скрипта будет относиться к случаям форумного дурнотония. По крайней мере другим будет ясно, с чем они смогут столкнуться. Мой посыл не охарактеризован призывом к удалению полезной (для кого-то) информации, а исключительно к допиливанию имеющейся. |
|
Back to top |
|
|
Victor_Dobrov
Joined: 15 Jul 2008 Posts: 50
|
|
Back to top |
|
|
skole
Joined: 31 Dec 2004 Posts: 162 Location: Россия, Оренбург
|
(Separately) Posted: Tue Feb 21, 2012 20:17 Post subject: |
|
|
Еще в тему, может кому понадобится... если Batya доработает, то хорошо
Создание шары из текущего каталога
Code: | ' ===================================================================
' Автор: SkOle, Оренбург
' Описание: Предоставляет текущему каталогу общий доступ
' Параметры: %P%N
' ===================================================================
Dim WSH, FSO
Set WSH = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\" & strComputer & "
ootcimv2")
Set objNewShare = objWMIService.Get("Win32_Share")
DESCRIPTION = InputBox("Укажите описание для создаваемого ресурса", "Создание общего ресурса")
errReturn = objNewShare.Create(WSH.CurrentDirectory, FSO.GetFolder(WSH.CurrentDirectory).Name, 0, TRUE, DESCRIPTION)
If errReturn = 0 Then
MsgBox "Общий ресурс для каталога " & WSH.CurrentDirectory & " успешно создан", vbInformation, "Уведомление"
End If
Set FSO = Nothing
Set WSH = Nothing
Wscript.Quit |
Удаление шары, если текущий каталог таким является
Code: | ' ===================================================================
' Автор: SkOle, Оренбург
' Описание: Убирает у текущего каталога общий доступ,
если таковой имеется
' Параметры: %P%N
' ===================================================================
Dim WSH, FSO
Set WSH = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\" & strComputer & "
ootcimv2")
Set colShares = objWMIService.ExecQuery ("Select * from Win32_Share Where Name = '" & FSO.GetFolder(WSH.CurrentDirectory).Name & "'")
For Each objShare in colShares
errReturn = objShare.Delete
Next
If errReturn = 0 Then
MsgBox "Общий ресурс для каталога " & WSH.CurrentDirectory & " успешно удален", vbInformation, "Уведомление"
End If
Set FSO = Nothing
Set WSH = Nothing
WScript.Quit |
Установка шрифта
Code: | ' ==============================================================
' Автор: SkOle, Оренбург
' Описание: Устанавливает текущий шрифт в систему
' Параметры: %P%N
' ==============================================================
Option Explicit
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
If WScript.Arguments.Count > 0 Then
If FSO.FileExists(WScript.Arguments(0)) Then
If (LCase(FSO.GetExtensionName(WScript.Arguments(0))) = "ttf") or (LCase(FSO.GetExtensionName(WScript.Arguments(0))) = "fon") or (LCase(FSO.GetExtensionName(WScript.Arguments(0))) = "otf") Then
Dim WSH
Set WSH = CreateObject("WScript.Shell")
FSO.CopyFile WScript.Arguments(0), WSH.SpecialFolders("Fonts") & ""
WSH.Run "RunDll32.exe gdi32.dll,AddFontResourceA " & FSO.GetBaseName(WScript.Arguments(0))
Set WSH = Nothing
Else
MsgBox "Данный файл не является шрифтом", vbCritical, "Ошибка"
End If
End If
End If
Set FSO = Nothing
WScript.Quit |
Аналог ChoiseEditor и пр. вешается на F4
Code: | ' ===================================================================
' Автор: SkOle, Оренбург
' Описание: Выбирает, через какую программу открыть текущий файл
' Выбор издет из списка в wincmd.ini
' Параметры: %P%N
' ===================================================================
Const Section = "ExternalApplication"
If WScript.Arguments.Count > 0 Then
Dim WSH, FSO, Ext
Set WSH = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
Commander_Path = WSH.ExpandEnvironmentStrings("%COMMANDER_PATH%")
Ext = FSO.GetExtensionName(WScript.Arguments(0))
Ini = ReadIni (Commander_Path & "wincmd.ini", Section, Ext)
If Ini <> "" Then
Exe = Replace(Ini, "%COMMANDER_PATH%", Commander_Path)
Ext = Trim(Left(FSO.GetExtensionName(Exe), 3))
If LCase(Ext) = "vbs" Then
WSH.Run Exe & " " & chr(34) & WScript.Arguments(0) & chr(34)
Else
WSH.Run chr(34) & Exe & chr(34) & " " & chr(34) & WScript.Arguments(0) & chr(34)
End If
Else
Ini = ReadIni (Commander_Path & "wincmd.ini", Section, "default")
Exe = Replace(Ini, "%COMMANDER_PATH%", Commander_Path)
WSH.Run chr(34) & Exe & chr(34) & " " & chr(34) & WScript.Arguments(0) & chr(34)
End If
Set WSH = Nothing
Set FSO = Nothing
End If
' Функция чтения INI-файла была взята с форума wincmd.ru
Function ReadIni( myFilePath, mySection, myKey )
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8
Dim intEqualPos
Dim objFSO, objIniFile
Dim strFilePath, strKey, strLeftString, strLine, strSection
Set objFSO = CreateObject( "Scripting.FileSystemObject" )
ReadIni = ""
strFilePath = Trim( myFilePath )
strSection = Trim( mySection )
strKey = Trim( myKey )
If objFSO.FileExists( strFilePath ) Then
Set objIniFile = objFSO.OpenTextFile( strFilePath, ForReading, False )
Do While objIniFile.AtEndOfStream = False
strLine = Trim( objIniFile.ReadLine )
If LCase( strLine ) = "[" & LCase( strSection ) & "]" Then
strLine = Trim( objIniFile.ReadLine )
Do While Left( strLine, 1 ) <> "["
intEqualPos = InStr( 1, strLine, "=", 1 )
If intEqualPos > 0 Then
strLeftString = Trim( Left( strLine, intEqualPos - 1 ) )
If LCase( strLeftString ) = LCase( strKey ) Then
ReadIni = Trim( Mid( strLine, intEqualPos + 1 ) )
If ReadIni = "" Then
ReadIni = " "
End If
Exit Do
End If
End If
If objIniFile.AtEndOfStream Then Exit Do
strLine = Trim( objIniFile.ReadLine )
Loop
Exit Do
End If
Loop
objIniFile.Close
Else
MsgBox strFilePath & " не найден", vbCritical, "Ошибка"
Wscript.Quit 1
End If
End Function |
ну и пример использования... необходимая секция из wincmd.ini
Code: | [ExternalApplication]
; По умолчанию
default=%COMMANDER_PATH% oolswin32
otepad++
otepad++.exe
; Внешние утилиты
exe=wscript "%COMMANDER_PATH% oolswin32
estorator
estorator.vbs"
iso=wscript "%COMMANDER_PATH% oolswin32ultraisoultraiso.vbs"
ico=%COMMANDER_PATH% oolswin32icofxicofx.exe
psd=%COMMANDER_PATH% oolswin32photoshopphotoshop.exe |
Last edited by skole on Sun Feb 26, 2012 09:41; edited 1 time in total |
|
Back to top |
|
|
Avada
Joined: 01 Aug 2008 Posts: 10315 Location: Россия, Саратов
|
(Separately) Posted: Wed Feb 22, 2012 12:27 Post subject: |
|
|
skole
По прежнему расположению в "Обмене кнопками" — нет, не в тему. Эта часть поста перенесена в более подходящее место.
Кстати, описания первых двух скриптов тоже следовало бы указывать как комментарии в самих скриптах. _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
|
skole
Joined: 31 Dec 2004 Posts: 162 Location: Россия, Оренбург
|
(Separately) Posted: Sun Feb 26, 2012 09:39 Post subject: |
|
|
Avada
ну я из своей сборки просто скопировал... описание скрипта жирным выделено |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|