1

Тема: AHK: различить процессы нескольких скриптов

Запущены 5 скриптов .ahk
Например: Main.ahk, 1.ahk, 2.ahk, 3.ahk, 4.ahk,
Main.ahk имеет иконку в трее - это главный скрипт.
Остальные 4 "вспомогательные" - не имеют иконку в трее
Все эти 5 скриптов в диспетчере задач имеют имя процесса autohotkey.exe

Допустим хочу завершить один из скриптов.
Можно только запустив из главного скрипта все отсальные 4 и сохранив их PID?
Есть ли способ различить имена запущенных скриптов?

2

Re: AHK: различить процессы нескольких скриптов

Насколько я знаю, у каждого процесса есть окно. У каждого окна есть имя. Программа Winspector Spy помогает увидеть имена скрытых окон.

3

Re: AHK: различить процессы нескольких скриптов

Насколько я знаю, у каждого процесса есть окно.

Это неверно. Но скрипт на AHK действительно имеет скрытое окно:

C:\0001\0001.ahk - AutoHotkey v1.0.48.03

Помнится, то ли YMP, то ли teadrinker что-то писали на эту тему: при запуске скрипта ему надо изменить заголовок этого «своего» окна. Тогда можно будет отслеживать извне наличие нескольких экземпляров даже одного и того же скрипта, не то что разных.

4

Re: AHK: различить процессы нескольких скриптов

Так получаем имя окна одного из процессов autohotkey.exe. А как узнать PID остальных процессов autohotkey.exe?

DetectHiddenWindows, on
Process, exist, autohotkey.exe
PID := errorlevel
WinGetTitle, out, ahk_pid %PID%
MsgBox % out

5

Re: AHK: различить процессы нескольких скриптов

Наверное, нужно искать среди существующих окон те, что с характерным заголовком, и определять их идентификатор процесса.
WinGet
Возвращает идентификатор окна, идентификатор его процесса, имя процесса, список элементов управления окна, список всех окон, отвечающих заданным критериям.

6

Re: AHK: различить процессы нескольких скриптов

Вот, что получилось.

DetectHiddenWindows, on
SetTitleMatchMode, RegEx
WinGet, list, list, .*.ahk - AutoHotkey.*
Loop % list
{
    ID:=List%a_index%
    WinGetTitle, title, ahk_id %ID%
    Gui, Add, Button, % "x0 y" A_Index * 30 " v" A_Index , Del
    Gui, Add, text, yp xp+30, % Title
}
Gui, show
Return

Buttondel:
ID:=List%A_GuiControl%
WinClose ahk_id %ID%
Guicontrol, hide, %A_GuiControl%
Return

GuiClose:
GuiEscape:
ExitApp