1 (изменено: BlackCat, 2021-05-27 16:11:32)

Тема: AHK: Process Wait для двух или более процессов

Добрый день!
Подскажите пожалуйста, если возможна такая конструкция без применения таймера в принципе, как сделать ожидание Process Wait для одного ИЗ двух и более обозначенных процессов?
Необходимо именно ожидание запуска процесса, а не проверка его существования.
Основная задача должна запускаться после запуска одного любого из процессов, обозначенных, например в Array[].
Что то по такой схеме:


Process Wait, A | Process Wait, B
... в случае запуска одного из процессов, выполняется остальная часть скрипта

Признателен за любую помощь!

2

Re: AHK: Process Wait для двух или более процессов

Такой код будет ждать либо notepad.exe, либо notepad++.exe:

obj := {processes: ["notepad.exe", "notepad++.exe"], exist: ""}
timer := Func("IsProcessExist").Bind(obj)
SetTimer, % timer, 1000
while !obj.exist
   Sleep, 100
; остальная часть скрипта:
MsgBox, % "process: " . obj.exist.name . "`nPID: " . obj.exist.PID
Return

IsProcessExist(obj) {
   for k, exe in obj.processes {
      Process, Exist, % exe
      if (PID := ErrorLevel) {
         SetTimer,, Delete
         obj.exist := {name: exe, PID: PID}
         break
      }
   }
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: Process Wait для двух или более процессов

teadrinker Круто! Ничего не понял, но это работает!
Буду разбираться с этим кодом.
Большое благодарю!

4

Re: AHK: Process Wait для двух или более процессов

Можно проще:

processes := ["notepad.exe", "notepad++.exe"]
Loop {
   Sleep, 1000
   for k, exe in processes {
      Process, Exist, % exe
      if (PID := ErrorLevel) {
         name := exe
         break 2
      }
   }
}
MsgBox, % "PID: " . PID . "`nname: " . exe
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: Process Wait для двух или более процессов

teadrinker да, это проще для понимания.
Что-то подобное я пытался сделать, но не додумал.
Благодарю за помощь!