View previous topic :: View next topic |
Author |
Message |
DrShark
Joined: 21 Oct 2006 Posts: 911 Location: Kyiv, Ukraine
|
(Separately) Posted: Sun Dec 30, 2007 14:52 Post subject: |
|
|
Tovarishh wrote: | скачиваем Hidec.exe (он скрывает консоль) и кидаем например в %COMMANDER_PATH%\Plugins\Utilities\
В WCMD_ENG.ini добавляем Цитата:
Quote: | [em_set_Russian]
Cmd=%COMMANDER_PATH%\Plugins\Utilities\hidec.exe "%COMMANDER_PATH%\rus.bat"
Param= |
|
Чтобы скрывать консоль, в дополнительной проге нет необходимости.
Вместо hidec.exe можно использовать VBScript такого содержания:
Code: | Dim ShellObj, argument
Set ShellObj = CreateObject("WScript.Shell")
argument = WScript.Arguments(0)
ShellObj.Run chr(34) & argument & chr(34),Hide |
|
|
Back to top |
|
|
Tovarishh
Joined: 16 Jun 2006 Posts: 15
|
(Separately) Posted: Sun Dec 30, 2007 21:44 Post subject: |
|
|
а можно скрипт или 2 скрипта (для каждого языка), что бы делал то же самое, но без BATников ? |
|
Back to top |
|
|
DrShark
Joined: 21 Oct 2006 Posts: 911 Location: Kyiv, Ukraine
|
(Separately) Posted: Wed Jan 02, 2008 03:33 Post subject: |
|
|
Tovarishh wrote: | а можно скрипт или 2 скрипта (для каждого языка), что бы делал то же самое, но без BATников ? |
Решил попробовать слепить такой скрипт, но столкнулся с тем, что
VBScript не позволяет отнимать число от переменной, в которую уже занесено число.
Задумывалось брать нужный язык из параметров скрипта.
Вот начало кода:
Code: | Option Explicit
Dim ShellObj, argument, oArgs, ArgNum, teststr, MyLng
Set ShellObj = CreateObject("WScript.Shell")
Set oArgs = WScript.Arguments
ArgNum = oArgs.Count
Msgbox ArgNum
LngArg = ArgNum - 1
MsgBox LngArg
MyLng = WScript.Arguments(LngArg)
MsgBox MyLng |
Msgbox'ы напиханы для отладки.
Так вот, если не использовать переменную LngArg, а прямо писать, например,
MyLng = WScript.Arguments(0), то всё работает.
LngArg = ArgNum - 1 приводит к ошибке "Variable is undefined"
Что тут "не так"? |
|
Back to top |
|
|
Volniy
Joined: 15 Dec 2004 Posts: 585 Location: Местный
|
(Separately) Posted: Wed Jan 02, 2008 16:34 Post subject: |
|
|
DrShark wrote: | столкнулся с тем, что VBScript не позволяет отнимать число от переменной, в которую уже занесено число. |
С Новым Годом Вас, уважаемый
Списываю эту чушь на бурное праздничное застолье
DrShark wrote: |
Code: | Option Explicit
Dim ShellObj, argument, oArgs, ArgNum, teststr, MyLng
Set ShellObj = CreateObject("WScript.Shell")
Set oArgs = WScript.Arguments
ArgNum = oArgs.Count
Msgbox ArgNum
LngArg = ArgNum - 1
MsgBox LngArg
MyLng = WScript.Arguments(LngArg)
MsgBox MyLng |
Msgbox'ы напиханы для отладки.
Так вот, если не использовать переменную LngArg, а прямо писать, например,
MyLng = WScript.Arguments(0), то всё работает.
LngArg = ArgNum - 1 приводит к ошибке "Variable is undefined"
Что тут "не так"? |
Ошибка в том, что переменная LngArg не была объявлена, как этого требует инструкция Option Explicit, до первого использования этой переменной в коде.
Так что или объяви ее явно (Dim LngArg) или, если ты не боишься последующих ошибок, связанных с банальными описками и тп, просто удали строчку Option Explicit из скрипта.
PS Наверное, это уже в Автоматизацию просится, там ведь есть тема про WSH. |
|
Back to top |
|
|
DrShark
Joined: 21 Oct 2006 Posts: 911 Location: Kyiv, Ukraine
|
(Separately) Posted: Wed Jan 02, 2008 16:56 Post subject: |
|
|
2Volniy
Не застолье, а невнимательность
Quote: | PS Наверное, это уже в Автоматизацию просится, там ведь есть тема про WSH. |
+1 |
|
Back to top |
|
|
DrShark
Joined: 21 Oct 2006 Posts: 911 Location: Kyiv, Ukraine
|
(Separately) Posted: Wed Jan 02, 2008 22:25 Post subject: |
|
|
2Volniy
Че-то скрипт опять выёживается
Я тебе ЛС с кодом кинул, если не сложно посмотри где там баг... |
|
Back to top |
|
|
DrShark
Joined: 21 Oct 2006 Posts: 911 Location: Kyiv, Ukraine
|
(Separately) Posted: Thu Jan 03, 2008 16:20 Post subject: |
|
|
Примеры кнопок для изменения языка:
1. Устанавливает английский язык по-умолчанию
Quote: | TOTALCMD#BAR#DATA
"C:\Program Files\totalcmd\changelng.vbs"
%%eng%%
C:\WINDOWS\System32\WScript.exe
changelng (one lng)
C:\Program Files\totalcmd\
-1 |
2. По-очереди меняет языки, идущие в параметрах.
Quote: | TOTALCMD#BAR#DATA
wscript.exe
"C:\Program Files\totalcmd\changelng.vbs" wcmd_rus wcmd_ukr wcmd_ext1_eng %%eng%%
C:\WINDOWS\System32\WScript.exe
changelng - multilang
C:\Program Files\totalcmd\
-1 |
Глядя на эти кнопки, надеюсь, станет понятным описание к скрипту:
Code: | '====================================================================
' changelng 1.0 - VB-скрипт для изменения языка Total Commander
' Использование:
' [wscript.exe] changelng.vbs wcmd_rus [wcmd_ukr] [%%eng%%]
' В рамках ([]) поданы необязательные параметры.
' Один параметр, следующий за changelng.vbs, указывает на
' применение этого языка независимо от текущего.
' Если параметра 2 или более, определяется текущий язык,
' и если он присутствует в параметрах, используется следующий за ним,
' в противном случае применяется язык, указанный в первом параметре.
' Под применением языка подразумевается применение .lng и .mnu файла,
' имя которого указано в параметре, т.е. для wcmd_rus будут использоватся
' wcmd_rus.lng и wcmd_rus.mnu
' Для использования умолчательного английского языка
' в качестве параметра следует использовать %%eng%%
' (c) DrShark, 2008
' Для работы с ini используется слегка модифицированный код Nolan Bagadiong,
' NAME: VBScript ReadINI/WriteINI
'
' AUTHOR: Bagadiong, Nolan
' DATE : 7/27/2001
'====================================================================
' Объявление переменных
Option Explicit
Public Lngext, Mnuext
Public FileSysObj, ini, reSection, reKey
Public ShellObj, argument, oArgs, ArgNum, teststr, LngArg, MyLng, MyMnu, Lng, Mnu
Public myscriptname, curdir, wincmdini
Set ShellObj = CreateObject("WScript.Shell")
Set oArgs = WScript.Arguments
LngExt = ".lng"
MnuExt = ".mnu"
Call main()
' Основной код, не относящийся к применению языков
Sub main()
Dim ErrMsg
myscriptname = Wscript.ScriptFullName
curdir = Left(myscriptname, InStrRev(myscriptname, "\", -1, 1))
wincmdini = READINI (curdir & "changelng.ini", "General", "wincmdini")
ArgNum = oArgs.Count
LngArg = ArgNum - 1
If ArgNum = 0 Then
ErrMsg = MsgBox ("Parameters required! See script description for details." & vbCrLf & "Open it in Notepad?", vbYesNo, "Error")
If ErrMsg = 6 then
ShellObj.run "Notepad.exe " & chr(34) & Wscript.ScriptFullName & chr(34)
Else
WScript.Quit
End If
WScript.Quit
End If
MyLng = WScript.Arguments(LngArg)
If ArgNum = 1 Then Call SingleLng()
If ArgNum > 1 Then Call MultiLng()
End Sub
' Если переметр один:
Sub SingleLng()
If MyLng = "%eng%" then
MnuExt = ""
LngExt = ""
MyLng = ""
MyMnu = ""
End If
MyMnu = MyLng + MnuExt
Call WRITEINI (wincmdini, "Configuration", "Mainmenu", MyMnu)
MyLng = MyLng + LngExt
Call WRITEINI (wincmdini, "Configuration", "LanguageIni", MyLng)
ShellObj.SendKeys "%{F4}"
WScript.Sleep 1000
ShellObj.Run chr(34) & "totalcmd.exe" & chr(34)
End Sub
' Если параметров несколько:
Sub MultiLng()
Dim LngLen, strArg, counter, curlngcnt, WriteLng
counter = 0
Lng = READINI (wincmdini, "Configuration", "LanguageIni")
Mnu = READINI (wincmdini, "Configuration", "Mainmenu")
LngLen = Len(Lng)
If LngLen = 0 then
MyLng = 0
Else
MyLng = Mid(Lng, 1, LngLen - 4)
End If
For Each strArg in oArgs
counter = counter + 1
if strArg = MyLng then curlngcnt = counter
Next
If curlngcnt = ArgNum then
WriteLng = WScript.Arguments(0)
Else
WriteLng = WScript.Arguments(curlngcnt)
End If
if WriteLng = "%eng%" then
WriteLng = ""
MyMnu = ""
MnuExt = ""
LngExt = ""
End If
MyMnu = WriteLng + MnuExt
call WRITEINI (wincmdini, "Configuration", "Mainmenu", MyMnu)
MyLng = WriteLng + LngExt
call WRITEINI (wincmdini, "Configuration", "LanguageIni", MyLng)
ShellObj.SendKeys "%{F4}"
WScript.Sleep 1000
ShellObj.Run chr(34) & curdir & "totalcmd.exe" & chr(34)
End Sub
' Работа с ini
'Usage
' READINI (file, section, item) returns value; otherwise returns ""
Function ReadINI(file, section, key)
dim line
set FileSysObj = CreateObject("Scripting.FileSystemObject")
ReadIni=""
If FileSysObj.FileExists(file) then
Set ini = FileSysObj.OpenTextFile( file, 1, False)
' Return array of sections if section and keys are empty
if section="" then
set reSection =new RegExp
reSection.Global =True
reSection.IgnoreCase=True
reSection.Pattern ="\[([a-zA-Z0-9 ]*)\]"
Do While ini.AtEndofStream =False
line = ini.ReadLine
if reSection.Test(line) then
tempSection=tempSection & reSection.Replace(line, "$1") & ","
end if
loop
ini.close
tempSection=left(tempSection, len(tempSection)-1)
ReadINI=split(tempSection,",")
set reSection=nothing
exit function
end if
' Return array of keys if keys are empty
if key="" then
set reSection =new RegExp
reSection.Global =True
reSection.IgnoreCase=True
reSection.Pattern ="\s*\[\s*" & section & "\s*\]"
Do While ini.AtEndofStream =False
line = ini.ReadLine
if reSection.Test(line) then
line=ini.ReadLine
do while instr(line,"[")=0
tempKeys=tempKeys & trim(left(line,instr(line,"=")-1)) & ","
line=ini.ReadLine
loop
tempKeys=left(tempKeys,(len(tempkeys)-1)) ' Remove last comma
ReadINI =split(tempKeys,",")
exit function
end if
loop
end if
'===================
' READINI Part for file, section, key
set reSection =new RegExp
reSection.Global =False
reSection.IgnoreCase=True
'reSection.Pattern ="\s*[\s*" & section & "\s*]"
reSection.Pattern ="\s*\[\s*" & section & "\s*\]"
set reKey =new RegExp
reKey.Global =False
reKey.IgnoreCase=True
reKey.Pattern="\s*" & key & "\s*=\s*"
Do While ini.AtEndofStream = False
line = ini.ReadLine
if reSection.Test(line) = True then
line=ini.ReadLine
do while instr(line,"[")=0
if reKey.Test(line) then
ReadINI=trim(mid(line,instr(line,"=")+1))
exit do
end if
line=ini.ReadLine
Loop
exit do
end if
loop
ini.Close
set reSection=nothing
set reKey =nothing
end if ' If FileSysObj
end function
'==================
' WRITEINI ( file, section, item, value )
' file = path and name of ini file
' section = [Section] must be in brackets in the ini file
' item = the variable to read;
' value = the value to assign to the item.
'
Sub WriteIni( file, section, item, value )
Dim in_section, section_exists, item_exists, wrote, path, TristateFalse
Dim reWSection, reItem, read_ini, write_ini
Dim line
set FileSysObj = CreateObject("Scripting.FileSystemObject")
in_section = False
section_exists = False
item_exists = ( ReadIni( file, section, item ) <> "" )
wrote = False
path = Mid( file, 1, InStrRev( file, "\" ) )
Set read_ini = FileSysObj.OpenTextFile( file, 1, True, TristateFalse )
Set write_ini = FileSysObj.CreateTextFile( path & "temp_ini.ini", False )
set reWSection =new RegExp
reWSection.Global =False
reWSection.IgnoreCase=True
reWSection.Pattern ="\s*[\s*" & section & "\s*]"
set reItem =new RegExp
reItem.Global =False
reItem.IgnoreCase=True
reItem.Pattern ="\s*" & item & "\s*="
While read_ini.AtEndOfStream = False
line = read_ini.ReadLine
If wrote = False Then
If reWSection.Test(line) Then
section_exists = True
in_section = True
ElseIf InStr( line, "[" )> 0 Then
in_section = False
End If
End If
If in_section Then
If item_exists = False Then
write_ini.WriteLine line
write_ini.WriteLine item & "=" & value
wrote = True
in_section = False
'DrShark
'msgbox "Writing " & line
ElseIf reItem.Test(line) Then
write_ini.WriteLine item & "=" & value
wrote = True
in_section = False
Else
write_ini.WriteLine line
End If
Else
write_ini.WriteLine line
End If
Wend
If section_exists = False Then ' section doesn't exist
section=trim(section)
item =trim(item)
write_ini.WriteLine
write_ini.WriteLine "[" & section & "]"
write_ini.WriteLine item & "=" & value
End If
read_ini.Close
write_ini.Close
FileSysObj.DeleteFile file
FileSysObj.MoveFile path & "temp_ini.ini", file
set reWSection=nothing
set reItem=nothing
End Sub |
Установка скрипта проста:
бросить его в папку с totalcmd.exe, затем создать там ini-файл changelng.ini и записать туда правильный путь к wincmd.ini:
Quote: | [General]
wincmdini=c:\program files\totalcmd\wincmd.ini |
Затем остаётся только перетащить скрипт на панель ТК и вбить нужные параметры.
Собственно, это первый работающий вариант скрипта и в дальнейшем
есть мысли его улучшить, т.к. сейчас он, очень вероятно , не работает на read-only носителях.
з.ы. Модераторам: можно перенести скрипт в автоматизацию, а здесь оставить кнопки. Есть смысл? |
|
Back to top |
|
|
CaptainFlint
Joined: 14 Dec 2004 Posts: 6151 Location: Москва
|
(Separately) Posted: Thu Jan 03, 2008 18:00 Post subject: |
|
|
Volniy wrote: | PS Наверное, это уже в Автоматизацию просится, там ведь есть тема про WSH. |
DrShark wrote: | з.ы. Модераторам: можно перенести скрипт в автоматизацию, а здесь оставить кнопки. Есть смысл? |
Смысл-то, наверное, есть, только я плохо представляю, как это можно сделать безболезненно, чтобы читателю не приходилось дёргаться между двумя ветками в попытках скомпоновать нужную кнопку. Код кнопки здесь, скрипт, который она вызывает — там... _________________ Почему же, ё-моё, ты нигде не пишешь "ё"? |
|
Back to top |
|
|
sergeich
Joined: 25 Apr 2006 Posts: 185 Location: Москва
|
(Separately) Posted: Fri Jan 04, 2008 16:22 Post subject: |
|
|
Возможно ли в TC сделать кнопку, при нажатии на которую выделенные файлы будут передавться на ярлык, который расположен в контекстном меню "Отправить" ? Например, выделенные файлы будут отправляться на принтер. Я пробовал создавать кнопку с указанием пути на ярлык и с параметрами %P%N но это не работает. |
|
Back to top |
|
|
Imago
Joined: 11 Aug 2007 Posts: 26
|
(Separately) Posted: Tue Jan 08, 2008 01:05 Post subject: |
|
|
Можно ли реализовать в виде кнопки включение\выключение микрофона? Очень часто приходится пользоваться.
Кнопку вызова свойств аудиоустройств использую, но она для этих целей очень неудобна. _________________ Dixi |
|
Back to top |
|
|
aLexx
Joined: 14 Mar 2005 Posts: 442 Location: Новокузнецк
|
(Separately) Posted: Fri Jan 11, 2008 00:37 Post subject: |
|
|
Кнопка для конвертации графических файлов в формат PNG с помощью консольной утилитки "рngоut.ехе".
Code: |
TOTALCMD#BAR#DATA
"%COMMANDER_PATH%\Addon\PngOut\PngOut.bat"
%P
%COMMANDER_PATH%\Addon\PngOut\PngOut.ico
Конвертация всех картинок в PNG
-1
|
Пути к файлам bat и ico вставляем свои. Запускается bat-файл с содержанием:
for %%i in (*.*) do pngout "%%i"
Сама утилита копируется в каталог Windows. Конвертируются файлы форматов PNG,JPG,GIF,TGA,PCX,BMP,
находящиеся в каталоге, где стоит курсор. Для ленивых архив (41 кб):
http://alexrudin.narod.ru/pngout.rar
Там сама утилита, хелпик к ней, иконка и бат-файл. Если надо конвертировать, например, только BMP,
то выражение в бат-файле "*.*" заменяем на "*.bmp". Ессно, без кавычек. |
|
Back to top |
|
|
belorus
Joined: 07 Mar 2007 Posts: 12
|
(Separately) Posted: Mon Jan 14, 2008 01:52 Post subject: |
|
|
Может кому пригодится -
Skype Portable с помощью тотала:
Создаём на жёстком диске папку для скайпа (у меня totalcmd\EXE\Skype ) и устанавливаем скайп туда. Затем в папке ...Skype\Phone создаём папку Data
(если есть профиль копируем его из C:\Documents and Settings\<your_login>\Application Data\Skype в эту папку)
Далее создаем кнопку:
TOTALCMD#BAR#DATA
%COMMANDER_DRIVE%\totalcmd\EXE\Skype\Phone\Skype.exe
Skype.exe /datapath:"Data" /removable
%COMMANDER_DRIVE%\totalcmd\EXE\Skype\Phone\
%COMMANDER_DRIVE%\totalcmd\EXE\Skype\Phone\Skype.exe
З.Ы. Опция в тотале "запускать в свернутом виде" в этом случае не работает |
|
Back to top |
|
|
Tovarishh
Joined: 16 Jun 2006 Posts: 15
|
(Separately) Posted: Mon Jan 28, 2008 15:48 Post subject: |
|
|
после установки Microsoft Visual C++ 2008 Redistributable скрипты в TCWSHelp.exe перестали работать
|
|
Back to top |
|
|
aka MAC
Joined: 03 Oct 2008 Posts: 5
|
(Separately) Posted: Fri Oct 03, 2008 01:11 Post subject: |
|
|
Подскажите, пожалуйста, как сделать кнопку "Очистить корзину".
И еще хотелось бы с помощью 7zip "Распаковать здесь" и "Распаковать в папку.." |
|
Back to top |
|
|
Worros
Joined: 19 Jan 2007 Posts: 1123
|
(Separately) Posted: Fri Oct 03, 2008 01:28 Post subject: |
|
|
aka MAC wrote: | Подскажите, пожалуйста, как сделать кнопку "Очистить корзину". | http://forum.wincmd.ru/viewtopic.php?t=5884&sid=83e890c3643ea1f611d64dd2f30ed8ae |
|
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
|