Страница 23 из 42
Добавлено: Сб фев 04, 2012 11:08
HEXFIX
Всем доброго времени суток.
Если уже было, сильно не ругайте - честно искал, но не нашёл.
Есть
скрипт, по-моему от
Batya, который создаёт файл с заданным именем с содержимым буфера обмена.
Можно ли его модифицировать таким образом, чтобы после создания файл сразу же открывался в редакторе (я использую AkelPad)?
Добавлено: Сб фев 04, 2012 11:20
Avada
HEXFIX
Безотносительно к технической стороне вопроса: уже много раз говорено (в том числе в
правилах и
памятке), что оверквотинг на форуме
запрещён. На существующие скрипты надо давать ссылки.
Выносится замечание, код заменяется ссылкой.
Добавлено: Чт фев 09, 2012 01:30
Flasher
HEXFIX
Забыл про просьбу. Правильней было бы использовать
этот скрипт. Но я пользуюсь своим:
Код: Выделить всё
' Создать файл с текстом буфера обмена (при наличии) и открыть его в редакторе
' Параметры: "%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
Добавлено: Чт фев 09, 2012 02:08
Tol!k
Добавлено: Чт фев 09, 2012 02:12
Flasher

Улыбнуло. Я сперва хотел тоже предложить эту кнопку, потом, увидев утилиту, подклейку даты и отсутствие указания нужного редактора, передумал..
Добавлено: Пт фев 10, 2012 17:15
Victor_Dobrov
Предлагаю скрипт переключения x32 <> x64 версий TC по клику на тексте 32 (или 64) за пунктом "Справка" (или последним в меню)
Код: Выделить всё
' Перезапуск 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
Добавлено: Сб фев 11, 2012 03:54
Flasher
Victor_Dobrov
Что-то наворочено много и не по делу. Хелпер с регистрацией тут вообще не нужен. Меню почему-то берётся именно английское (русскому пользователю автор об этом сообщить не захотел почему-то), а по логике должно читаться из ключа Mainmenu. Проверку запущенности TC вполне можно опустить при замене.
Строчку с %PROCESSOR_ARCHITEW6432% я вообще не понял. Я обычно разрядность через WMI определяю. Почему сравнивается имя exe-шника именно в верхнем регистре мне совсем непонятно, как и то, почему не учтён исключение с другим именем. Я пришёл к выводу, что проверку нужно делать только по размеру (InternalName не берём). Функция Quote бесполезная. Зачем вообще проверять, есть кавычки или нет, если можно сразу их ставить? Навязывание расположения файла(ов) быть не должно. Лучше просто сделать подписи, где и что менять, этого как правило достаточно. Зачем для переменной em_Name писать отдельно функцию не уловил. Почему написано, что пункт добавляется после меню "Справка" (которой может и не быть), когда оно там совсем никак не идентифицируется?
Скрипт больше тянет на сборочный или для себя. Выкладывание его в паблик преждевременное.
Добавлено: Сб фев 11, 2012 04:17
Victor_Dobrov
Flasher писал(а):Victor_Dobrov
Меню почему-то берётся именно английское, а по логике должно читаться из ключа Mainmenu. Строчку с %PROCESSOR_ARCHITEW6432% я вообще не понял.
TCS.INIRead(COMMANDER_INI,"Configuration","Mainmenu") - эту строку не заметили?
%PROCESSOR_ARCHITEW6432% - при запуске из под TC x32 определяет, что система - x64.
Не нравится Helper, посоветуйте, как использовать TCFS2
Скрипт делал на случай, если заголовок окна скрыт. Лучше бы ответили, работает ли скрипт, пункт "32" появляется в конце меню?
Выкладывание его в паблик преждевременное.
С таким подходом здесь половину скриптов убрать надо.
Добавлено: Сб фев 11, 2012 04:32
Flasher
Victor_Dobrov писал(а):TCS.INIRead(COMMANDER_INI,"Configuration","Mainmenu") - эту строку не заметили?
В этой строке как раз и стоит wcmd_
eng.mnu.
Victor_Dobrov писал(а):%PROCESSOR_ARCHITEW6432% - при запуске из под TC x32 определяет, что система - x64.
Там есть некоторые аспекты, касаемые этой переменной, которые не всегда показывают верный результат. Мы их
тут разбирали. К тому же переменная может существовать не по желанию системы, а по желанию пользователя, что и вызовит проблемы. Если надо, могу подсказать как легко получать архитектуру через WMI.
Victor_Dobrov писал(а):Не нравится Helper, посоветуйте, как использовать TCFS2
В TCFS2 есть функции для работы с ini-файлами. Они описаны в справке.
Victor_Dobrov писал(а):С таким подходом здесь половину скриптов убрать надо.
Не согласен. Половиной никак не пахнет. Да и если скрипт пишется кому-то, то проблемы решаются по ходу поступления и тестирования, а если скрипт выкладывается самостоятельно как окончательный (без предупреждения о возможных багах), то это не есть хорошо. Я, например, скрипт обновления ТС сразу выкладывать побоялся, понимая, что могут быть подводные камни. Добрые люди помогли в тестах и работе над исключениями, за что я им благодарен. Если бы я скрипт выложил раньше времени, то тут многим нервы точно подпортил.
Добавлено: Сб фев 11, 2012 04:44
Victor_Dobrov
В этой строке как раз и стоит wcmd_eng.mnu.
но это значение по-умолчанию, читается именно то, что установил пользователь.
Если надо, могу подскать как легко получать архитектуру через WMI
не надо, также работает не всегда и слишком тормозит.
Я не совсем понял, вы просите убрать скрипт? Если да, я это сделаю.
Добавлено: Сб фев 11, 2012 04:48
Flasher
Victor_Dobrov писал(а):но это значение по-умолчанию, читается именно то, что установил пользователь.
По умолчанию, если на этапе установки был выбран английский.
Victor_Dobrov писал(а):не надо, также работает не всегда и слишком тормозит.
Т.е. "не всегда"? У меня нигде проблем не было (и не только у меня). Да, скорость несколько ниже (тормоза в основном возникают при использовании общей маски (*), что легко обходится), но зато сам способ точно надёжнее. А когда речь о перезапуске, то там вообще этот момент незаметен.
Victor_Dobrov писал(а):Я не совсем понял, вы просите убрать скрипт? Если да, я это сделаю.
Ни в коем случае. Раз обсуждение завелось, то удаление скрипта будет относиться к случаям форумного дурнотония. По крайней мере другим будет ясно, с чем они смогут столкнуться. Мой посыл не охарактеризован призывом к удалению полезной (для кого-то) информации, а исключительно к допиливанию имеющейся.
Добавлено: Сб фев 11, 2012 07:45
Victor_Dobrov
Flasher
Исправил некоторые замечания в SwitchTC32or64.vbs, ссылка на скрипт та же:
http://forum.wincmd.ru/viewpost.php?p=89213
Добавлено: Вт фев 21, 2012 20:25
skole
Еще в тему, может кому понадобится... если Batya доработает, то хорошо
Создание шары из текущего каталога
Код: Выделить всё
' ===================================================================
' Автор: 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
Удаление шары, если текущий каталог таким является
Код: Выделить всё
' ===================================================================
' Автор: 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
Установка шрифта
Код: Выделить всё
' ==============================================================
' Автор: 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
Код: Выделить всё
' ===================================================================
' Автор: 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
Код: Выделить всё
[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
Добавлено: Ср фев 22, 2012 12:27
Avada
skole
По прежнему расположению в "Обмене кнопками" — нет, не в тему. Эта часть поста перенесена в более подходящее место.
Кстати, описания первых двух скриптов тоже следовало бы указывать как комментарии в самих скриптах.
Добавлено: Вс фев 26, 2012 09:39
skole
Avada
ну я из своей сборки просто скопировал... описание скрипта жирным выделено
