Belkin
|
Posted: Thu Apr 27, 2006 00:40 Post subject: |
|
|
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 |
|