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 

Обмен кнопками
Goto page Previous  1, 2, 3 ... 14, 15, 16 ... 43, 44, 45  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Секреты и советы printer-friendly view
View previous topic :: View next topic  
Author Message
DrShark



Joined: 21 Oct 2006
Posts: 911
Location: Kyiv, Ukraine

Post (Separately) Posted: Sun Dec 30, 2007 14:52    Post subject: Reply with quote

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
View user's profile Send private message
Tovarishh



Joined: 16 Jun 2006
Posts: 15

Post (Separately) Posted: Sun Dec 30, 2007 21:44    Post subject: Reply with quote

а можно скрипт или 2 скрипта (для каждого языка), что бы делал то же самое, но без BATников ?
Back to top
View user's profile Send private message
DrShark



Joined: 21 Oct 2006
Posts: 911
Location: Kyiv, Ukraine

Post (Separately) Posted: Wed Jan 02, 2008 03:33    Post subject: Reply with quote

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
View user's profile Send private message
Volniy



Joined: 15 Dec 2004
Posts: 585
Location: Местный

Post (Separately) Posted: Wed Jan 02, 2008 16:34    Post subject: Reply with quote

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.
Back to top
View user's profile Send private message
DrShark



Joined: 21 Oct 2006
Posts: 911
Location: Kyiv, Ukraine

Post (Separately) Posted: Wed Jan 02, 2008 16:56    Post subject: Reply with quote

2Volniy
Не застолье, а невнимательность Smile
Quote:
PS Наверное, это уже в Автоматизацию просится, там ведь есть тема про WSH.

+1
Back to top
View user's profile Send private message
DrShark



Joined: 21 Oct 2006
Posts: 911
Location: Kyiv, Ukraine

Post (Separately) Posted: Wed Jan 02, 2008 22:25    Post subject: Reply with quote

2Volniy
Че-то скрипт опять выёживается Smile
Я тебе ЛС с кодом кинул, если не сложно посмотри где там баг...
Back to top
View user's profile Send private message
DrShark



Joined: 21 Oct 2006
Posts: 911
Location: Kyiv, Ukraine

Post (Separately) Posted: Thu Jan 03, 2008 16:20    Post subject: Reply with quote

Примеры кнопок для изменения языка:
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 носителях.

з.ы. Модераторам: можно перенести скрипт в автоматизацию, а здесь оставить кнопки. Есть смысл?
Back to top
View user's profile Send private message
CaptainFlint



Joined: 14 Dec 2004
Posts: 6151
Location: Москва

Post (Separately) Posted: Thu Jan 03, 2008 18:00    Post subject: Reply with quote

Volniy wrote:
PS Наверное, это уже в Автоматизацию просится, там ведь есть тема про WSH.

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

Смысл-то, наверное, есть, только я плохо представляю, как это можно сделать безболезненно, чтобы читателю не приходилось дёргаться между двумя ветками в попытках скомпоновать нужную кнопку. Код кнопки здесь, скрипт, который она вызывает — там...
_________________
Почему же, ё-моё, ты нигде не пишешь "ё"?
Back to top
View user's profile Send private message
sergeich



Joined: 25 Apr 2006
Posts: 185
Location: Москва

Post (Separately) Posted: Fri Jan 04, 2008 16:22    Post subject: Reply with quote

Возможно ли в TC сделать кнопку, при нажатии на которую выделенные файлы будут передавться на ярлык, который расположен в контекстном меню "Отправить" ? Например, выделенные файлы будут отправляться на принтер. Я пробовал создавать кнопку с указанием пути на ярлык и с параметрами %P%N но это не работает. Sad
Back to top
View user's profile Send private message
Imago



Joined: 11 Aug 2007
Posts: 26

Post (Separately) Posted: Tue Jan 08, 2008 01:05    Post subject: Reply with quote

Можно ли реализовать в виде кнопки включение\выключение микрофона? Очень часто приходится пользоваться.
Кнопку вызова свойств аудиоустройств использую, но она для этих целей очень неудобна.
_________________
Dixi
Back to top
View user's profile Send private message
aLexx



Joined: 14 Mar 2005
Posts: 442
Location: Новокузнецк

Post (Separately) Posted: Fri Jan 11, 2008 00:37    Post subject: Reply with quote

Кнопка для конвертации графических файлов в формат 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
View user's profile Send private message
belorus



Joined: 07 Mar 2007
Posts: 12

Post (Separately) Posted: Mon Jan 14, 2008 01:52    Post subject: Reply with quote

Может кому пригодится -
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
View user's profile Send private message
Tovarishh



Joined: 16 Jun 2006
Posts: 15

Post (Separately) Posted: Mon Jan 28, 2008 15:48    Post subject: Reply with quote

после установки Microsoft Visual C++ 2008 Redistributable скрипты в TCWSHelp.exe перестали работать Confused Shocked Shocked Shocked

Back to top
View user's profile Send private message
aka MAC



Joined: 03 Oct 2008
Posts: 5

Post (Separately) Posted: Fri Oct 03, 2008 01:11    Post subject: Reply with quote

Подскажите, пожалуйста, как сделать кнопку "Очистить корзину".

И еще хотелось бы с помощью 7zip "Распаковать здесь" и "Распаковать в папку.."
Back to top
View user's profile Send private message
Worros



Joined: 19 Jan 2007
Posts: 1123

Post (Separately) Posted: Fri Oct 03, 2008 01:28    Post subject: Reply with quote

aka MAC wrote:
Подскажите, пожалуйста, как сделать кнопку "Очистить корзину".
http://forum.wincmd.ru/viewtopic.php?t=5884&sid=83e890c3643ea1f611d64dd2f30ed8ae
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Секреты и советы All times are GMT + 4 Hours
Goto page Previous  1, 2, 3 ... 14, 15, 16 ... 43, 44, 45  Next
Page 15 of 45

 
Jump to:  
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