1

我想通过自动热键中的 PID 获取窗口句柄,因为窗口的标题总是在变化。如果有人想知道,我想处理 last.fm 主窗口。

4

3 回答 3

7

要获取 PID 的第一个窗口类/ID,您可以执行以下操作:

Process, Exist, "notepad.exe"
NewPID = %ErrorLevel%  ; Save the value immediately since ErrorLevel is often changed.
if NewPID
{ ; process exists!
    WinGetClass, ClassID, ahk_pid %NewPID%   ; ClassID will be read here for the process
    WinGetTitle, Title, ahk_pid %NewPID% ; Title will contain the processe's first window's title
    IfWinExist ahk_class %ClassID% ; this will find the first window by the ClassID
    {
        WinGet, WinID, ID ; this will get the ID of the window into WinID variable
        WinActivate ; this will bring this window to front (not necessary for example)  
        ListVars ; this will display your variables
        Pause
    }
    IfWinExist %Title% ; this will find the first window with the window title
    {
        WinGet, WinID, ID
        WinActivate ; this will bring this window to front (not necessary for example)  
        ListVars
        Pause
    }
}

我敢肯定,除了 IfWinExist 之外,还有其他方法可以转换 PID,并且可能有多个具有相同类 ID 的进程。:) 此外,您可以使用

于 2015-01-04T18:26:48.300 回答
0

作为可重用的功能:

getHwndForPid(pid) {
    pidStr := "ahk_pid " . pid
    WinGet, hWnd, ID, %pidStr%
    return hWnd
}
于 2017-04-10T18:48:47.627 回答
-1

您可以使用带有 Cmd 参数的WinGetID命令作为.

Cmd 是要执行的操作,如果为空则默认为 ID。
ID:检索窗口的唯一 ID 号。也称为窗口句柄 (HWND)。

WinTitle可以是 PID。

WinGet, UniqueID, ID, ahk_pid %VarContainingPID%

另一个选项是WinExist()

UniqueID := WinExist("ahk_pid" . VarContainingPID)
于 2012-08-14T21:21:25.797 回答