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 

Single Post  Topic: Скрипты Autohotkey 
Author Message
Belkin



PostPosted: Thu Apr 27, 2006 00:40    Post subject: Reply with quote

2 KarS
В срипте открытия корзины грамотнее использовать SendMessage.

Однако, в твоем последем скриптике про корзину есть пара ошибок/неточностей.
Во-первых, неверен синтаксис команды if. И хотя случайно работает и неверный вариант, все же лучше освоить правильный. Он будет выглядеть вот так:
Code:
<!r::
DetectHiddenWindows, On
IfWinActive, ahk_class TTOTAL_CMD
{
    SendMessage, 0x433, 4001,,, ahk_class TTOTAL_CMD
    SendMessage, 0x433, 2127,,, ahk_class TTOTAL_CMD
}
IfWinNotActive, ahk_class TTOTAL_CMD
{
    Run, C:\Program Files\Total Commander\TOTALCMD.EXE
    WinWait, ahk_class TTOTAL_CMD
    SendMessage, 0x433, 4001,,, ahk_class TTOTAL_CMD
    SendMessage, 0x433, 2127,,, ahk_class TTOTAL_CMD
}
return

Во-вторых, не верна логика скрипта. Поэтому скрипт выше НЕ ВЕРНЫЙ. И хотя он и работает, но только при определенных условиях, которые я не стану рассматривать.
Во-третьих, ты проверяешь активность окна Тотала, а нужно проверять его существование (т.е. запущен он или нет).

А вот как правильно. Я приведу 2 варианта с разным синтаксисом.
Вариант 1: (со скобками в команде if)

Code:
<!r:: ; назначаем горячую клавишу
DetectHiddenWindows, On ; ищем и в скрытых окнах (если ТС свернут в трей)
IfWinNotExist, ahk_class TTOTAL_CMD ; если не существует окна Тотала (он не запущен), то...
{ ; эту (и парную ей) скобку можно не указывать, если между ними только одна команда. Если команд больше одной - скобки нужны.
    Run, C:\Program Files\Total Commander\TOTALCMD.EXE ; запустить ТС
    WinWait, ahk_class TTOTAL_CMD ; подождать окно ТС
} ; это парная первой скобка
; Все команды ниже будут выполнятся независимо от того был ли уже запущен ТС, или запустился только что.
WinActivate ; активировать окно ТС
SendMessage, 0x433, 4001,,, ahk_class TTOTAL_CMD ; переключиться на левую панель
SendMessage, 0x433, 2127,,, ahk_class TTOTAL_CMD ; открыть в ней корзину
return ; конец действий по горячей клавише

Вариант 2: (без скобок в команде if)

Code:
<!r:: ; назначаем горячую клавишу
DetectHiddenWindows, On ; ищем и в скрытых окнах (если ТС свернут в трей)
IfWinNotExist, ahk_class TTOTAL_CMD ; если не существует окна Тотала (он не запущен), то...
    Run, C:\Program Files\Total Commander\TOTALCMD.EXE ; запустить ТС
; Все команды ниже будут выполнятся независимо от того был ли уже запущен ТС, или запустился только что.
WinWait, ahk_class TTOTAL_CMD ; подождать окно ТС
WinActivate ; активировать окно ТС
SendMessage, 0x433, 4001,,, ahk_class TTOTAL_CMD ; переключиться на левую панель
SendMessage, 0x433, 2127,,, ahk_class TTOTAL_CMD ; открыть в ней корзину
return ; конец действий по горячей клавише


Оба варианта правильны, хотя первый вариант чуть более грамотен (не из-за скобок, а потому, что ожидаем окно (WinWait) после запуска Тотала, и не ожидаем, если Тотал уже запущен. И хотя это ожидание во втором случае и длится доли секунды, но всё же оно лишнее).

По поводу твоего "скрипта для Totalcmd F5/F6"...
Поскольку то, что я хочу сказать относится скорее к AutoHotkey, чем к Total Commander`у, то выскажусь в твоем топике на http://forum.script-coding.info/topic.php?topic=90
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group