teadrinker
Спасибо, теперь заработало, хотя и не так, как хотелось бы: если Process.Terminate завершает ВСЕ найденные в цикле for подходящие процессы, то в переменную записывается PID только верхнего процесса, поэтому пока не будет закрыт текущий процесс, следующий команду на закрытие не получит. Даже на небольших прогах, которые запустил для эксперимента, долго вышло, а в реальной работе предвижу секунд 20-30. Или все же придется убивать особенно долго завершающиеся процессы, чего не хотелось бы.
DetectHiddenWindows, on
Loop
{
NN = 0
For Process in ComObjGet("winmgmts:").ExecQuery("Select * from Win32_Process WHERE ExecutablePath LIKE '%E:\\%'")
NN := Process.ProcessId(1)
if NN = 0
break
WinClose, ahk_pid %NN%
;WinWaitClose,,, 5
;if ErrorLevel
;WinKill, ahk_pid %NN%
;Process, Close,%NN%
}