Обмен кнопками
Select messages from
# through # FAQ
[/[Print]\]
Goto page Previous  1, 2, 3 ... 14, 15, 16 ... 43, 44, 45  Next  :| |:
Total Commander -> Секреты и советы

#211:  Author: DrSharkLocation: Kyiv, Ukraine PostPosted: Sun Dec 30, 2007 14:52
    —
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

#212:  Author: Tovarishh PostPosted: Sun Dec 30, 2007 21:44
    —
а можно скрипт или 2 скрипта (для каждого языка), что бы делал то же самое, но без BATников ?

#213:  Author: DrSharkLocation: Kyiv, Ukraine PostPosted: Wed Jan 02, 2008 03:33
    —
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"
Что тут "не так"?

#214:  Author: VolniyLocation: Местный PostPosted: Wed Jan 02, 2008 16:34
    —
DrShark wrote:
столкнулся с тем, что VBScript не позволяет отнимать число от переменной, в которую уже занесено число.


С Новым Годом Вас, уважаемый Very Happy
Списываю эту чушь на бурное праздничное застолье Laughing

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.

#215:  Author: DrSharkLocation: Kyiv, Ukraine PostPosted: Wed Jan 02, 2008 16:56
    —
2Volniy
Не застолье, а невнимательность Smile
Quote:
PS Наверное, это уже в Автоматизацию просится, там ведь есть тема про WSH.

+1

#216:  Author: DrSharkLocation: Kyiv, Ukraine PostPosted: Wed Jan 02, 2008 22:25
    —
2Volniy
Че-то скрипт опять выёживается Smile
Я тебе ЛС с кодом кинул, если не сложно посмотри где там баг...

#217:  Author: DrSharkLocation: Kyiv, Ukraine PostPosted: Thu Jan 03, 2008 16:20
    —
Примеры кнопок для изменения языка:
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

Затем остаётся только перетащить скрипт на панель ТК и вбить нужные параметры.
Собственно, это первый работающий вариант скрипта и в дальнейшем
есть мысли его улучшить, т.к. сейчас он, очень вероятно Smile, не работает на read-only носителях.

з.ы. Модераторам: можно перенести скрипт в автоматизацию, а здесь оставить кнопки. Есть смысл?

#218:  Author: CaptainFlintLocation: Москва PostPosted: Thu Jan 03, 2008 18:00
    —
Volniy wrote:
PS Наверное, это уже в Автоматизацию просится, там ведь есть тема про WSH.

DrShark wrote:
з.ы. Модераторам: можно перенести скрипт в автоматизацию, а здесь оставить кнопки. Есть смысл?

Смысл-то, наверное, есть, только я плохо представляю, как это можно сделать безболезненно, чтобы читателю не приходилось дёргаться между двумя ветками в попытках скомпоновать нужную кнопку. Код кнопки здесь, скрипт, который она вызывает — там...

#219:  Author: sergeichLocation: Москва PostPosted: Fri Jan 04, 2008 16:22
    —
Возможно ли в TC сделать кнопку, при нажатии на которую выделенные файлы будут передавться на ярлык, который расположен в контекстном меню "Отправить" ? Например, выделенные файлы будут отправляться на принтер. Я пробовал создавать кнопку с указанием пути на ярлык и с параметрами %P%N но это не работает. Sad

#220:  Author: Imago PostPosted: Tue Jan 08, 2008 01:05
    —
Можно ли реализовать в виде кнопки включение\выключение микрофона? Очень часто приходится пользоваться.
Кнопку вызова свойств аудиоустройств использую, но она для этих целей очень неудобна.

#221:  Author: aLexxLocation: Новокузнецк PostPosted: Fri Jan 11, 2008 00:37
    —
Кнопка для конвертации графических файлов в формат 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". Ессно, без кавычек.

#222:  Author: belorus PostPosted: Mon Jan 14, 2008 01:52
    —
Может кому пригодится -
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


З.Ы. Опция в тотале "запускать в свернутом виде" в этом случае не работает

#223:  Author: Tovarishh PostPosted: Mon Jan 28, 2008 15:48
    —
после установки Microsoft Visual C++ 2008 Redistributable скрипты в TCWSHelp.exe перестали работать Confused Shocked Shocked Shocked


#224:  Author: aka MAC PostPosted: Fri Oct 03, 2008 01:11
    —
Подскажите, пожалуйста, как сделать кнопку "Очистить корзину".

И еще хотелось бы с помощью 7zip "Распаковать здесь" и "Распаковать в папку.."

#225:  Author: Worros PostPosted: Fri Oct 03, 2008 01:28
    —
aka MAC wrote:
Подскажите, пожалуйста, как сделать кнопку "Очистить корзину".
http://forum.wincmd.ru/viewtopic.php?t=5884&sid=83e890c3643ea1f611d64dd2f30ed8ae



Total Commander -> Секреты и советы


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Goto page Previous  1, 2, 3 ... 14, 15, 16 ... 43, 44, 45  Next  :| |:
Page 15 of 45

Powered by phpBB © 2001, 2005 phpBB Group