1

Тема: AHK: как определить текущий статус другого запущенного ahk-скрипта?

Я написал скрипт-менеджер для управления файлами и процессами .ahk-скриптов. Этот скрипт-менеджер умеет pause/unpause других запущенных скриптов, а также suspend/unsuspend hotkeys им же, используя PostMessage.

Вопрос в том: а как определить текущий статус (paused? hotkeys_suspended?) другого запущенного ahk-скрипта?

У Lexikos'а описано как это сделать, но у меня не получилось заставить работать этот код. Как мне подсказали - возможно из-за того, что он писался под другой AHK (у меня AHK_L x64 последней релизной версии). Более того, я не знаю как работают его SendMessage и DllCall'ы и не уверен, что этот код сумел бы определить статус скрипта не имеющего собственную иконку в трее (#NoTrayIcon или же она могла быть скрыта/убита как-то так).

2 (изменено: serzh82saratov, 2013-08-15 12:35:32)

Re: AHK: как определить текущий статус другого запущенного ahk-скрипта?

У меня на х32 работает


SetTitleMatchMode, 2
DetectHiddenWindows, On
script_id := WinExist("keys.ahk ahk_class AutoHotkey")
MsgBox % script_id

; Force the script to update its Pause/Suspend checkmarks.
SendMessage, 0x211,,,, ahk_id %script_id%  ; WM_ENTERMENULOOP
SendMessage, 0x212,,,, ahk_id %script_id%  ; WM_EXITMENULOOP

; Get script status from its main menu.
mainMenu := DllCall("GetMenu", "uint", script_id)
fileMenu := DllCall("GetSubMenu", "uint", mainMenu, "int", 0)
isPaused := DllCall("GetMenuState", "uint", fileMenu, "uint", 4, "uint", 0x400) >> 3 & 1
isSuspended := DllCall("GetMenuState", "uint", fileMenu, "uint", 5, "uint", 0x400) >> 3 & 1
DllCall("CloseHandle", "uint", fileMenu)
DllCall("CloseHandle", "uint", mainMenu)

MsgBox Paused: %isPaused%`nSuspended: %isSuspended%

Иконка в трее не при делах. Определяются пункты меню скрытого (основного) окна.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

3

Re: AHK: как определить текущий статус другого запущенного ahk-скрипта?

Спасибо, видимо я как-то не так его код тогда пробовал: Ваш код у меня работает на AHK_L x64. И даже с #NoTrayIcon.
Спасибо.