Страница 5 из 7
Добавлено: Вс мар 17, 2013 16:42
LonerD
Каким образом послать Тоталу пользовательскую команду через Unicode-версию Autohotkey_L ? (в том числе через 64-битную версию если есть различие).
Для ANSI есть рабочий
вариант, но адаптировать под Unicode самостоятельно не удаётся.
Добавлено: Вс мар 17, 2013 19:10
Flasher
Все рабочие варианты для любой версии Autohotkey_L приведены в этой ветке. Почему не работает именно указанный вариант, понять без всех выполненных условий нельзя. Видимо, там какая-то проверка не срабатывает. Нужна-то всего одна строчка.
Добавлено: Вс мар 17, 2013 20:26
LonerD
Все рабочие варианты для любой версии Autohotkey_L приведены в этой ветке.
В ветке рабочие варианты.
Но вся суть в том, что в ветке до этого момента рассматривались только cm_ команды, посылаемые в виде числового кода. Я же спрашиваю про пользовательскую (em_) команду.
Про одну строчку - согласен, скорее всего решение элементарное. Но уже пробовал и осмыслить команду, и метод тыка - пока безрезультатно.
Согласно совету
на оф.форуме заменил:
cbData := StrPutVar(Command, Command, "cp0")
[s]Добавил функцию StrPutVar, но и так не работает.[/s]
Таки работает (почему не работало сразу - вопрос на засыпку).
Может, кому пригодится:
Код: Выделить всё
SendTCUserCommand("em_blablabla")
Return
SendTCUserCommand(Command) ; string
{
If Command <>
{
VarSetCapacity(CopyDataStruct, 3*A_PtrSize, 0) ; Set up the structure's memory area.
dwData := Asc("E") + 256 * Asc("M")
NumPut(dwData, CopyDataStruct, 0)
cbData := StrPutVar(Command, Command, "cp0")
NumPut(cbData, CopyDataStruct, A_PtrSize) ; OS requires that this be done.
NumPut(&Command, CopyDataStruct, 2*A_PtrSize) ; Set lpData to point to the string itself.
SendMessage, 0x4a, 0, &CopyDataStruct,, ahk_class TTOTAL_CMD ; 0x4a is WM_COPYDATA. Must use Send not Post.
}
}
StrPutVar(string, ByRef var, encoding)
{
VarSetCapacity( var, StrPut(string, encoding) * ((encoding="utf-16"||encoding="cp1200") ? 2 : 1) ) ; Ensure capacity.
return StrPut(string, &var, encoding) ; Copy or convert the string.
}
Добавлено: Сб май 25, 2013 14:10
LonerD
Не могу понять.
Записываю пользовательскую команду (или же кнопку):
Код: Выделить всё
[em_MyScript]
cmd=%commander_path%\Utilities\AutoHotkey\AutoHotkey.exe
param=%%commander_path%%\Scripts\MyScript.ahk
Не работает. AutoHotkey пытается искать скрипт по пути "текущий_активный_каталог\%commander_path%\Scripts\MyScript.ahk"
А вот так работает:
Код: Выделить всё
[em_MyScript]
cmd=%commander_path%\Utilities\AutoHotkey\AutoHotkey.exe %commander_path%\Scripts\MyScript.ahk
В чём ошибка в первой записи, как правильно передать скрипт в поле параметра ?
Добавлено: Сб май 25, 2013 14:26
Avada
LonerD
А зачем, собственно, разносить запись на два поля, если всё нормально работает в одном?
Добавлено: Сб май 25, 2013 16:06
LonerD
Avada писал(а):А зачем, собственно, разносить запись на два поля, если всё нормально работает в одном?
Да, я тоже знаю золотое правило админа "Если что-то работает - лучше не трогай".
Вопрос в другом. Где ошибка в первом варианте записи? Это особенность AHK или Тотала в целом? Ведь и в одном и во втором случае путь к скрипту выступает в качестве параметра, но в одну строку работает, а в две - нет.
Добавлено: Сб май 25, 2013 16:57
Flasher
LonerD
Ты явно не в ту тему залез. На днях
обсуждали, а ещё
здесь, и
здесь, и много ещё где. Ты бы поискать не поленился.
Добавлено: Сб май 25, 2013 19:42
LonerD
Flasher
Спасибо за ссылочки.
"Тотал не раскрывает переменные окружения, указанные в поле параметров кнопки."
Тогда всё в тему. Значит, проблема в том, что AutoHotkey.exe не умеет раскрывать переменные окружения, потому в данном частном случае единственный правильный выход - указывать программу и параметр в одной строке.
Добавлено: Сб май 25, 2013 20:09
Flasher
LonerD писал(а):проблема в том, что AutoHotkey.exe не умеет раскрывать переменные окружения
Он умеет это делать в теле скрипта, а не в пути к нему.
LonerD писал(а):потому в данном частном случае единственный правильный выход - указывать программу и параметр в одной строке.
Ну, если ты смотрел примеры по ссылкам внимательно, то не единственный.
Добавлено: Вс июн 09, 2013 17:47
LonerD
Каким образом "заморозить" и "разморозить окно" (запретить и разрешить прорисовку), а затем перерисовать содержимое окна (панелей) ? Всё в целом окно Тотала или хотя бы только панели.
То есть скрыть активность при выполнении скриптов (выделение, переименование, навигацию и т.д...)
Пробовал вот так:
SendMessage, 0xB, 0,,, ahk_class TTOTAL_CMD - окно замораживается насмерть, оно вообще отображается лишь в панели инструментов, и лечится только закрытием.
SendMessage, 0xB, 1,,, ahk_class TTOTAL_CMD - не размораживается.
Плюс ещё как-то перерисовать надо...
Тему читал, но как это всё адаптировать в AutoHotKey - не представляю.
PS. Собственно, сам и отвечу. Хоть такой способ и не рекомендуется умными программистами, но для кратковременных операций имхо будет приемлем и выглядит довольно заманчиво - лишь лёгкое помаргивание панелек.
Код: Выделить всё
; Получаем HWND Тотала и блокируем перерисовку
WinGet, TCHWND, ID, ahk_class TTOTAL_CMD
DllCall("LockWindowUpdate", "uint", TCHWND)
; Делаем что-нибудь
; Разблокируем окно
DllCall("LockWindowUpdate", "uint", 0)
Добавлено: Пт июл 05, 2013 17:48
dmitriy111
Есть вот скрипт который ловит двойные быстрые нажатия указанных клавиш и выполняет соответствующую команду, но есть проблема - клавиша, по которой происходит срабатывание перестает работать в сочетаниях с другими клавишами (например Ctrl+S), подскажите пожалуйста как это можно исправить?
Код: Выделить всё
DoubleKey(sendKeys, timeout)
{
if(A_PriorHotKey = A_ThisHotKey and A_TimeSincePriorHotkey < timeout)
Send, %sendKeys%
}
LCtrl:: DoubleKey("^V", 200)
Добавлено: Вс мар 10, 2019 19:16
rediffusion
Кто подскажет как - "Назначить F4 на клик по колёсику мыши".
autorun.cfg вставил:
Код: Выделить всё
ShellExec /SW_HIDE /W /TT "%COMMANDER_DRIVE%\Users\NIKA\Downloads\F4-Mouse\F4W.exe" "%COMMANDER_DRIVE%\Users\NIKA\Downloads\F4-Mouse\F4W.ahk"
Файлы скачал. Что дальше?
Добавлено: Вс мар 10, 2019 19:22
Avada
rediffusion
Сообщения с многоточиями в начале фраз дальше будут удаляться. Раз нормальные замечание игнорируются, придётся поступать так. А за злостные нарушения правил форума у нас банят.
Добавлено: Пн мар 11, 2019 08:00
Flasher
rediffusion
В памятке чётко написано, что делать в случае "не работает".
И не autorum.cfg, а autorun.cfg.
Добавлено: Пн мар 11, 2019 08:20
Avada
rediffusion
Во-первых, не надо отвечать модератору в теме, для этого есть ЛС.
Во-вторых, содержимое строки из autorun.cfg и подобные её вещи впредь прошу оформлять либо кодом, либо цитатой. Под спойлер обычно упрятывается либо объёмная, либо посторонняя информация.