AutoIt3 使用进程名获取窗口句柄

AutoIt3 使用进程名获取窗口句柄音乐的窗口 Title 会动态改变 Class 又与相同 因此自己写一个 WinGetHandle 方法 使用进程名 Music exe 和窗口 Class TXGuiFoundat 获得窗口句柄

背景

需要用AutoIt3控制音乐播放器,首先要获取音乐的窗口句柄

问题

解决办法

自己写一个_WinGetHandleByPnmAndCls方法,使用进程名(Music.exe)和窗口Class(TXGuiFoundation)获得窗口句柄

代码如下

#include 
    #include 
    #include 
    Local $hWnd = _WinGetHandleByPnmAndCls("Music.exe", "TXGuiFoundation") If Not $hWnd Then MsgBox($MB_SYSTEMMODAL, "", "窗口没找到") Exit EndIf WinActivate($hWnd) ; 根据pname和class获取窗口句柄,找不到则返回0 Func _WinGetHandleByPnmAndCls($pname, $class) ; 根据进程名查找进程id Local $pid = ProcessExists($pname) ; 如果进程存在,继续 If $pid Then return _WinGetHandleByPidAndCls($pid, $class) Else Return 0 EndIf EndFunc ; 根据pid和class获取窗口句柄,找不到则返回0 Func _WinGetHandleByPidAndCls($pid, $class) ; 这里使用枚举所有顶层窗口方法,WinList方法会返回大量隐藏窗口 Local $winArr = _WinAPI_EnumWindowsTop() ; 遍历所有窗口,进程id与指定进程id比较 For $i=1 To $winArr[0][0] If $pid=WinGetProcess($winArr[$i][0]) And $winArr[$i][1]=$class Then ; 一个进程会有多个窗口,所以要用class来筛选 return $winArr[$i][0] EndIf Next Return 0 EndFunc
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/213303.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午6:09
下一篇 2026年3月18日 下午6:09


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号