Добавлено: Пн июл 21, 2025 12:49
Понятно. Тогда будем ждать исправлений. Так-то такая запись и по моему мнению более правильная, чем буфер гонять.Loopback писал(а):То что не работает - это баг, регресс с версии 2.2.17.
Понятно. Тогда будем ждать исправлений. Так-то такая запись и по моему мнению более правильная, чем буфер гонять.Loopback писал(а):То что не работает - это баг, регресс с версии 2.2.17.
Нет, я ожидаю, что у SetHotkeyAction будет функция двойного щелчка, например, двойной щелчок по цифровой клавише для выполнения какой-либо команды cm_ или em_.Loopback писал(а):Наверно имелось в виду ControlSetMouseAction? В любом случае, к сожалению, нет. Есть технические сложности.yahuu писал(а):Можно ли добавить функцию двойного щелчка в SetHotkeyAction?
Да, в AHK есть примеры, как сделать обработку двойного или даже тройного нажатия клавиш, но и в Autorun можно сделать что-то похожее. Самый простой пример:yahuu писал(а):Если это невозможно реализовать, придется использовать AHK.
Код: Выделить всё
SetHotkeyAction /H:F12 F12DoublePress
Func F12DoublePress()
Static t1 = 0
If (GetUptime() - t1) < 300 Then
ShowHint("F12 double pressed")
EndIf
t1 = GetUptime()
EndFunc
Код: Выделить всё
ControlSetMouseAction /L /B:7 17 AutorunStatus
ControlSetHint /F /D:50 /B:7 17 "AutorunHints"Рад, что дела у вас не стоят на месте. Когда я полность освобожусь, то обязательно посмотрю последнюю версию вашей сборки.AkulaBig писал(а):Наконец-то я закончил переделку сборки на многоязычную. 2202 строки кода на Autorun.
Кода у вас появится время, прочтите на оффоруме (если к тому времени тема не пропадет) мою тему про косяки перевода. Меня многие поддержали и обосновали намного лучше меня. Ответ Гислера гениален - я не буду ничего переделыватьOrion9 писал(а):А по поводу Гислера... Ну что тут можно сказать. Меня его смешные и нелепые отмазки не устраивают
Кстати да, вполне себе рабочий вариант. Я как-то в тот момент зациклился на внутренней реализации, а зачем, если всё уже есть.Orion9 писал(а):но и в Autorun можно сделать что-то похожее
У меня тоже времени не сказать чтобы много.Orion9 писал(а):К сожалению, дел ещё по горло и времени на Autorun и на ТС пока нет, но все-таки посмотрел флаг DT_CALCRECT в функции DrawText, как обещал. Заморочек там много, и вряд ли они стоят того, чтобы с ними разбираться. Может быть, вы внесёте изменения в ShowHint и сделаете возможность менять содержимое посказки и другие параметры без вызова новой подсказки?
Если бы так было можно, то так и было бы сделано. Но в чём проблема с использованием LAST_HINT_WINDOW?Orion9 писал(а): Например, брать хэндл не из макроса LAST_HINT_WINDOW, а от самой функции ShowHint и возвращаемого ей значения. А все остальные операции с подсказкой делать через этот хэндл, включаяя изменение стиля и текста, если требуется.
Не знаю пока, надо тестировать.Orion9 писал(а):Можно как-то решить проблему?
О срочности речи не было. Да и вообще это не так уж и обязательно. Просто если будет возможность менять текст подсказки без вызова нового окна, это позволит использовать подсказку в виде "висящего табло", в котором содержимое обновляется без мелькания окон.Loopback писал(а):У меня тоже времени не сказать чтобы много.
Немного смутило, что в справке говорится об использовании задержки, если хэндл не возвращается.Loopback писал(а):Но в чём проблема с использованием LAST_HINT_WINDOW?
А вообще это можно как-то сделать на уже отображенной подсказке? Опять же, сугубо факультативно.Loopback писал(а):Стили по хэндлу менять точно нет.
Да вот сделал на скорую руку, думал баг проявится, но нет - ТС ни разу не завалился:Loopback писал(а):Не знаю пока, надо тестировать.
Код: Выделить всё
ControlSetHint /F /D:50 /B:5 17 "F7Hint"
Func F7Hint()
Return "F7 hint text"
EndFunc
ControlSetMouseAction /L /B:5 17 F7MouseAction
Func F7MouseAction()
ShowPopupMenu /D /F "CreateF7Menu"
EndFunc
Func CreateF7Menu()
Local txt
txt = txt & 'MENUITEM "Menu 1", 10000' & auCRLF
txt = txt & 'MENUITEM "Menu 2", 10000' & auCRLF
txt = txt & 'MENUITEM "Menu 3", 10000' & auCRLF
txt = txt & 'MENUITEM SEPARATOR' & auCRLF
txt = txt & 'MENUITEM "Settings...", 10000' & auCRLF
Return txt
EndFuncКод: Выделить всё
ControlSetHint /F /D:50 /B:7 17 "AutorunHints"
Func AutorunHints()
Local A_Version, A_Copyright, A_DateTime, _
A_Wdx = AUTORUN_PATH & "\Autorun.wdx", txt
If IsPressed (KEY_SHIFT) Then Return GetState("libs")
If IsPressed (KEY_CTRL) Then
txt = GetState("procs")
If StrLen(txt) > 0 Then txt = auCRLF & txt
Return GetState("threads") & txt
Endif
If IsPressed (KEY_ALT) Then Return GetState("paths")
A_Version = FileGetVersion(A_Wdx, "FileVersion")
A_Copyright = FileGetVersion(A_Wdx, "LegalCopyright")
obj = Plugin("FileDateTime")
If ERROR = 0 Then
obj.FileName = A_Wdx
A_DateTime = StrFormat("%.0f", obj.GetValue(3))
Free(obj)
Else
A_DateTime = "Error " & ERROR
Endif
Return "Версия: " & A_Version & auCRLF & "Дата изменения: " & A_DateTime & auCRLF & "Авторские права: " & A_Copyright
EndFunc
Если что, речь идет не более чем нескольких десятках миллисекунд. И это ограничение я, кажется, уже устранил.Orion9 писал(а):Немного смутило, что в справке говорится об использовании задержки, если хэндл не возвращается.
Если всё переписать фактически с нуля - можно, конечно. Просто подсказки вообще не планировались с прицелом на динамическое использование.Orion9 писал(а):А вообще это можно как-то сделать на уже отображенной подсказке? Опять же, сугубо факультативно.
Ну ок, как появится что-то, что можно повторить - вернёмся к этому.Orion9 писал(а):ТС ни разу не завалился
Это хорошо. А то действительно не совсем понятно было, что с этой задержкой делать. Ведь если не известно, нужна задержа или не нужна, пришлось бы по факту каждый раз её вставлять, чтобы гарантировать получение хэндла.Loopback писал(а):Если что, речь идет не более чем нескольких десятках миллисекунд. И это ограничение я, кажется, уже устранил.
Понял. Не стоит оно того. Не берите в голову. Ну тогда хотя бы текстовое содержимое если будет возможность менять динамически, и то будет хорошо.Loopback писал(а):Если всё переписать фактически с нуля - можно, конечно.
Я буду ещё пересматривать и оптимизировать эту кнопку, когда появится возможность. Так что да - можно будет к этому вернуться со временем.Loopback писал(а):Ну ок, как появится что-то, что можно повторить - вернёмся к этому.
Код: Выделить всё
A_DateTime = Date('yyyyMMdd', FileGetTime(A_Wdx))Код: Выделить всё
ControlSetHint /F /D:50 /B:5 17 "F7Hint"
Func F7Hint()
If IsPressed (0x10) Then Return GetState("paths")
Sleep(50)
Return "F7 hint text" & auCRLF & GetState("paths")
EndFunc
ControlSetMouseAction /L /B:5 17 F7MouseAction
ControlSetMouseAction /L /K:C /B:5 17 F7MouseAction
Func F7MouseAction()
ShowPopupMenu /D /F "CreateF7Menu"
EndFunc
Func CreateF7Menu()
Local txt
Static p = GetState("paths")
txt = txt & 'MENUITEM "Menu 1", 10000' & auCRLF
txt = txt & 'MENUITEM "Menu 2", 10000' & auCRLF
txt = txt & 'MENUITEM "Menu 3", 10000' & auCRLF
txt = txt & 'MENUITEM SEPARATOR' & auCRLF
txt = txt & 'MENUITEM "Settings...", 10000' & auCRLF
Return txt
EndFuncЯ так и не смог добиться описанного эффекта.Orion9 писал(а):Но будьте готовы, что баг проявляется довольно редко
Это хорошо. Конечно, такое смещение кнопок тоже косячок, надо будет попробовать исправить.Orion9 писал(а):Вероятно, так и есть.
Да, было бы здорово. Но и сейчас уже стало неплохо, когда знаешь истинную причину. Стараюсь теперь ближе к центру кликать по горизонтали - пока ни разу не [s]лоханулся[/s] промахнулся )Loopback писал(а):надо будет попробовать исправить
Код: Выделить всё
# WM_MENUSELECT
SetMessageAction /P 0x011F "MenuSelectCallback"
Func MenuSelectCallback(hWnd, uMsg, wParam, lParam)
Local buf = Buffer(100), _
nId = BitAND(wParam, 0xffff)
DllCall("GetMenuStringW", _
"handle", lParam, _
"uint", nId, _
"ptr", buf.ptr, _
"int", 50, _
"uint", 0)
WinSetText("uMsg: " & uMsg & " ID: " & nId & " lParam: " & lParam & " Item: " & buf.GetStr())
ShowHint("uMsg: " & uMsg & auCRLF & _
"ID: " & nId & auCRLF & _
"lParam: " & lParam & auCRLF & _
"Item: " & buf.GetStr(), "", "", 500, 1)
EndFunc