Скрипты Autohotkey
Select messages from
# through # FAQ
[/[Print]\]
Goto page Previous  1, 2, 3, 4, 5, 6, 7  Next  :| |:
Total Commander -> Автоматизация Total Commander

#61:  Author: LonerDLocation: Донецк PostPosted: Sun Mar 17, 2013 16:42
    —
Каким образом послать Тоталу пользовательскую команду через Unicode-версию Autohotkey_L ? (в том числе через 64-битную версию если есть различие).
Для ANSI есть рабочий вариант, но адаптировать под Unicode самостоятельно не удаётся.

#62:  Author: FlasherLocation: Москва PostPosted: Sun Mar 17, 2013 19:10
    —
Все рабочие варианты для любой версии Autohotkey_L приведены в этой ветке. Почему не работает именно указанный вариант, понять без всех выполненных условий нельзя. Видимо, там какая-то проверка не срабатывает. Нужна-то всего одна строчка.

#63:  Author: LonerDLocation: Донецк PostPosted: Sun Mar 17, 2013 20:26
    —
Quote:
Все рабочие варианты для любой версии Autohotkey_L приведены в этой ветке.

В ветке рабочие варианты.

Но вся суть в том, что в ветке до этого момента рассматривались только cm_ команды, посылаемые в виде числового кода. Я же спрашиваю про пользовательскую (em_) команду.
Про одну строчку - согласен, скорее всего решение элементарное. Но уже пробовал и осмыслить команду, и метод тыка - пока безрезультатно.
Согласно совету на оф.форуме заменил:
cbData := StrPutVar(Command, Command, "cp0")
Добавил функцию StrPutVar, но и так не работает.
Таки работает (почему не работало сразу - вопрос на засыпку).
Может, кому пригодится:
Code:

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.
}

#64:  Author: LonerDLocation: Донецк PostPosted: Sat May 25, 2013 14:10
    —
Не могу понять.
Записываю пользовательскую команду (или же кнопку):
Code:
[em_MyScript]
cmd=%commander_path%\Utilities\AutoHotkey\AutoHotkey.exe
param=%%commander_path%%\Scripts\MyScript.ahk

Не работает. AutoHotkey пытается искать скрипт по пути "текущий_активный_каталог\%commander_path%\Scripts\MyScript.ahk"

А вот так работает:
Code:
[em_MyScript]
cmd=%commander_path%\Utilities\AutoHotkey\AutoHotkey.exe %commander_path%\Scripts\MyScript.ahk

В чём ошибка в первой записи, как правильно передать скрипт в поле параметра ?

#65:  Author: AvadaLocation: Россия, Саратов PostPosted: Sat May 25, 2013 14:26
    —
LonerD
А зачем, собственно, разносить запись на два поля, если всё нормально работает в одном?

#66:  Author: LonerDLocation: Донецк PostPosted: Sat May 25, 2013 16:06
    —
Avada wrote:
А зачем, собственно, разносить запись на два поля, если всё нормально работает в одном?

Да, я тоже знаю золотое правило админа "Если что-то работает - лучше не трогай".
Вопрос в другом. Где ошибка в первом варианте записи? Это особенность AHK или Тотала в целом? Ведь и в одном и во втором случае путь к скрипту выступает в качестве параметра, но в одну строку работает, а в две - нет.

#67:  Author: FlasherLocation: Москва PostPosted: Sat May 25, 2013 16:57
    —
LonerD
Ты явно не в ту тему залез. На днях обсуждали, а ещё здесь, и здесь, и много ещё где. Ты бы поискать не поленился.

#68:  Author: LonerDLocation: Донецк PostPosted: Sat May 25, 2013 19:42
    —
Flasher
Спасибо за ссылочки.
"Тотал не раскрывает переменные окружения, указанные в поле параметров кнопки."
Тогда всё в тему. Значит, проблема в том, что AutoHotkey.exe не умеет раскрывать переменные окружения, потому в данном частном случае единственный правильный выход - указывать программу и параметр в одной строке.

#69:  Author: FlasherLocation: Москва PostPosted: Sat May 25, 2013 20:09
    —
LonerD wrote:
проблема в том, что AutoHotkey.exe не умеет раскрывать переменные окружения
Он умеет это делать в теле скрипта, а не в пути к нему.

LonerD wrote:
потому в данном частном случае единственный правильный выход - указывать программу и параметр в одной строке.
Ну, если ты смотрел примеры по ссылкам внимательно, то не единственный.

#70:  Author: LonerDLocation: Донецк PostPosted: Sun Jun 09, 2013 17:47
    —
Каким образом "заморозить" и "разморозить окно" (запретить и разрешить прорисовку), а затем перерисовать содержимое окна (панелей) ? Всё в целом окно Тотала или хотя бы только панели.
То есть скрыть активность при выполнении скриптов (выделение, переименование, навигацию и т.д...)
Пробовал вот так:
SendMessage, 0xB, 0,,, ahk_class TTOTAL_CMD - окно замораживается насмерть, оно вообще отображается лишь в панели инструментов, и лечится только закрытием.
SendMessage, 0xB, 1,,, ahk_class TTOTAL_CMD - не размораживается.
Плюс ещё как-то перерисовать надо...

Тему читал, но как это всё адаптировать в AutoHotKey - не представляю.

PS. Собственно, сам и отвечу. Хоть такой способ и не рекомендуется умными программистами, но для кратковременных операций имхо будет приемлем и выглядит довольно заманчиво - лишь лёгкое помаргивание панелек.
Code:
; Получаем HWND Тотала и блокируем перерисовку
WinGet, TCHWND, ID, ahk_class TTOTAL_CMD
DllCall("LockWindowUpdate", "uint", TCHWND)
; Делаем что-нибудь
; Разблокируем окно
DllCall("LockWindowUpdate", "uint", 0)

#71:  Author: dmitriy111 PostPosted: Fri Jul 05, 2013 17:48
    —
Есть вот скрипт который ловит двойные быстрые нажатия указанных клавиш и выполняет соответствующую команду, но есть проблема - клавиша, по которой происходит срабатывание перестает работать в сочетаниях с другими клавишами (например Ctrl+S), подскажите пожалуйста как это можно исправить?

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

LCtrl:: DoubleKey("^V", 200)

#72:  Author: rediffusion PostPosted: Sun Mar 10, 2019 20:16
    —
Кто подскажет как - "Назначить F4 на клик по колёсику мыши".

autorun.cfg вставил:
Code:
ShellExec /SW_HIDE  /W /TT "%COMMANDER_DRIVE%\Users\NIKA\Downloads\F4-Mouse\F4W.exe"  "%COMMANDER_DRIVE%\Users\NIKA\Downloads\F4-Mouse\F4W.ahk"


Файлы скачал. Что дальше?


Last edited by rediffusion on Mon Mar 11, 2019 11:31; edited 5 times in total

#73:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Mar 10, 2019 20:22
    —
rediffusion
Сообщения с многоточиями в начале фраз дальше будут удаляться. Раз нормальные замечание игнорируются, придётся поступать так. А за злостные нарушения правил форума у нас банят.

#74:  Author: FlasherLocation: Москва PostPosted: Mon Mar 11, 2019 09:00
    —
rediffusion
В памятке чётко написано, что делать в случае "не работает".
И не autorum.cfg, а autorun.cfg.

#75:  Author: AvadaLocation: Россия, Саратов PostPosted: Mon Mar 11, 2019 09:20
    —
rediffusion
Во-первых, не надо отвечать модератору в теме, для этого есть ЛС.
Во-вторых, содержимое строки из autorun.cfg и подобные её вещи впредь прошу оформлять либо кодом, либо цитатой. Под спойлер обычно упрятывается либо объёмная, либо посторонняя информация.



Total Commander -> Автоматизация Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Goto page Previous  1, 2, 3, 4, 5, 6, 7  Next  :| |:
Page 5 of 7

Powered by phpBB © 2001, 2005 phpBB Group