Скрипты Autohotkey

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

Аватара пользователя
LonerD
Сообщения: 1173
Зарегистрирован: Вт янв 04, 2011 03:56
Откуда: Макеевка
Контактная информация:

Сообщение LonerD »

Каким образом послать Тоталу пользовательскую команду через Unicode-версию Autohotkey_L ? (в том числе через 64-битную версию если есть различие).
Для ANSI есть рабочий вариант, но адаптировать под Unicode самостоятельно не удаётся.
Windows 11 | TC DreamLair eternal pre-α
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Все рабочие варианты для любой версии Autohotkey_L приведены в этой ветке. Почему не работает именно указанный вариант, понять без всех выполненных условий нельзя. Видимо, там какая-то проверка не срабатывает. Нужна-то всего одна строчка.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
LonerD
Сообщения: 1173
Зарегистрирован: Вт янв 04, 2011 03:56
Откуда: Макеевка
Контактная информация:

Сообщение 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.
}
Windows 11 | TC DreamLair eternal pre-α
Аватара пользователя
LonerD
Сообщения: 1173
Зарегистрирован: Вт янв 04, 2011 03:56
Откуда: Макеевка
Контактная информация:

Сообщение 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
В чём ошибка в первой записи, как правильно передать скрипт в поле параметра ?
Windows 11 | TC DreamLair eternal pre-α
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

LonerD
А зачем, собственно, разносить запись на два поля, если всё нормально работает в одном?
Даже самая богатая фантазия
Не представит себе наши безобразия.
Аватара пользователя
LonerD
Сообщения: 1173
Зарегистрирован: Вт янв 04, 2011 03:56
Откуда: Макеевка
Контактная информация:

Сообщение LonerD »

Avada писал(а):А зачем, собственно, разносить запись на два поля, если всё нормально работает в одном?
Да, я тоже знаю золотое правило админа "Если что-то работает - лучше не трогай".
Вопрос в другом. Где ошибка в первом варианте записи? Это особенность AHK или Тотала в целом? Ведь и в одном и во втором случае путь к скрипту выступает в качестве параметра, но в одну строку работает, а в две - нет.
Windows 11 | TC DreamLair eternal pre-α
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

LonerD
Ты явно не в ту тему залез. На днях обсуждали, а ещё здесь, и здесь, и много ещё где. Ты бы поискать не поленился.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
LonerD
Сообщения: 1173
Зарегистрирован: Вт янв 04, 2011 03:56
Откуда: Макеевка
Контактная информация:

Сообщение LonerD »

Flasher
Спасибо за ссылочки.
"Тотал не раскрывает переменные окружения, указанные в поле параметров кнопки."
Тогда всё в тему. Значит, проблема в том, что AutoHotkey.exe не умеет раскрывать переменные окружения, потому в данном частном случае единственный правильный выход - указывать программу и параметр в одной строке.
Windows 11 | TC DreamLair eternal pre-α
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

LonerD писал(а):проблема в том, что AutoHotkey.exe не умеет раскрывать переменные окружения
Он умеет это делать в теле скрипта, а не в пути к нему.
LonerD писал(а):потому в данном частном случае единственный правильный выход - указывать программу и параметр в одной строке.
Ну, если ты смотрел примеры по ссылкам внимательно, то не единственный.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
LonerD
Сообщения: 1173
Зарегистрирован: Вт янв 04, 2011 03:56
Откуда: Макеевка
Контактная информация:

Сообщение 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)
Windows 11 | TC DreamLair eternal pre-α
dmitriy111
Сообщения: 25
Зарегистрирован: Пн апр 01, 2013 13:09

Сообщение dmitriy111 »

Есть вот скрипт который ловит двойные быстрые нажатия указанных клавиш и выполняет соответствующую команду, но есть проблема - клавиша, по которой происходит срабатывание перестает работать в сочетаниях с другими клавишами (например Ctrl+S), подскажите пожалуйста как это можно исправить?

Код: Выделить всё

DoubleKey(sendKeys, timeout)
{
  if(A_PriorHotKey = A_ThisHotKey and A_TimeSincePriorHotkey < timeout)
    Send, %sendKeys%
}

LCtrl:: DoubleKey("^V", 200)
Аватара пользователя
rediffusion
Сообщения: 34
Зарегистрирован: Пн фев 25, 2019 20:24

Сообщение 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"
Файлы скачал. Что дальше?
Последний раз редактировалось rediffusion Пн мар 11, 2019 10:31, всего редактировалось 5 раз.
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

rediffusion
Сообщения с многоточиями в начале фраз дальше будут удаляться. Раз нормальные замечание игнорируются, придётся поступать так. А за злостные нарушения правил форума у нас банят.
Даже самая богатая фантазия
Не представит себе наши безобразия.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

rediffusion
В памятке чётко написано, что делать в случае "не работает".
И не autorum.cfg, а autorun.cfg.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

rediffusion
Во-первых, не надо отвечать модератору в теме, для этого есть ЛС.
Во-вторых, содержимое строки из autorun.cfg и подобные её вещи впредь прошу оформлять либо кодом, либо цитатой. Под спойлер обычно упрятывается либо объёмная, либо посторонняя информация.
Даже самая богатая фантазия
Не представит себе наши безобразия.
Ответить