AHK найти pid для explorer.exe? - PullRequest
       39

AHK найти pid для explorer.exe?

0 голосов
/ 05 февраля 2020

Это относится к этому вопросу .

Как мне сделать оператор if в AutoHotKey, который запускается, если текущее приложение не explorer.exe. Это сделано для предотвращения выхода из сценария explorer.exe, что он и сделал изначально (если я работал в проводнике).

Текущий сценарий (который вообще ничего не завершает):

Pause::
WinGet,win_pid,PID,ProcessName,A
if (ProcessName != "explorer.exe") {
Run,taskkill /f /pid %win_pid%,,,
return
} else {
return
}

Оригинальный скрипт (который успешно завершает работу последнего приложения, включая проводник [если это было последнее приложение]):

Pause::
WinGet,win_pid,PID,A
Run,taskkill /f /pid %win_pid%,,,
return

1 Ответ

1 голос
/ 05 февраля 2020

Прежде всего, что не так в вашем скрипте:
Вы используете WinGet с подкомандой PID .
. Принимает следующие параметры:
WinGet, OutputVar, PID [, WinTitle, WinText, ExcludeTitle, ExcludeText]
Как видите, последние два аргумента, которые вы передаете, не имеют смысла. Вы пытаетесь сопоставить окно с названием «ProcessName», и оно также должно содержать текст «A».
Если вы хотите получить имя процесса, вы должны использовать подкоманду WinGet для этого так:

WinGet, output, ProcessName, A ;A, as a WinTitle, means the currently active window
MsgBox, % output

Однако нет необходимости go об этом таким образом. Есть более простые способы.
Сейчас я покажу и объясню лучший способ создания контекстно-зависимой горячей клавиши с помощью директив #.
В частности, #IfWinNotActive - это то, что вы хотите использовать .
В параметре WinTitle мы можем обращаться к окну проводника напрямую через имя процесса с помощью ahk_exe.

#IfWinNotActive, ahk_exe explorer.exe
Pause::
    WinGet, win_pid, PID, A
    Run, taskkill /f /pid %win_pid%
return
#IfWinNotActive

И теперь у нас есть горячая клавиша, которая срабатывает только в том случае, если активное окно не является проводником.

...