如何在autohotkey中通过PID获取窗口句柄?

时间:2012-08-14 17:13:16

标签: autohotkey

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

3 个答案:

答案 0 :(得分:6)

Honest Abe给出的答案不正确。 Suitup想要将PID转换为Window句柄。不是PID的窗口句柄。

要获取PID的第一个窗口Class / 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的进程。 :) 另外你可以使用

答案 1 :(得分:0)

您可以将WinGet命令与Cmd参数一起用作PID

WinGet, OutputVar [, Cmd, WinTitle, WinText, ExcludeTitle, ExcludeText]

  

Cmd是要执行的操作,如果空白默认为ID   PID:检索窗口的进程ID(PID)。

其他选项包括:
Process
Run

答案 2 :(得分:0)

作为可重复使用的功能:

getHwndForPid(pid) {
    pidStr := "ahk_pid " . pid
    WinGet, hWnd, ID, %pidStr%
    return hWnd
}