找回密码
 加入
搜索
查看: 5688|回复: 6

[GUI管理] 怎么得到任何一个窗口所有的控件(子窗口)的句柄(已解决)

  [复制链接]
发表于 2014-6-17 15:16:38 | 显示全部楼层 |阅读模式
本帖最后由 siton 于 2014-6-17 18:59 编辑

怎么得到一个窗口所有的控件的句柄,如题。

像按键精灵里,有这个功能的插件,

刚接触AUTOIT,,求解。
 楼主| 发表于 2014-6-17 16:14:51 | 显示全部楼层
没人回吗。
高手来哦。
发表于 2014-6-17 16:49:48 | 显示全部楼层
兄弟!只能获取窗口或控件单句柄!不能一口气全部获取!你可以获取一个一个的然后合并一起!就可以答到你的效果了!
发表于 2014-6-17 17:44:51 | 显示全部楼层
试试这样?

#include <WinAPI.au3>
#include <Array.au3>
Opt('MustDeclareVars', 1)

_Main()

Func _Main()
        Local $aWindows,$aWindowss ,$i, $n,$pid
        $aWindows = _WinAPI_EnumWindowsTop()
        For $i = 1 To $aWindows[0][0]
                        Local $avArray[1]
                        $pid = WinGetProcess($aWindows[$i][0])
                        $aWindowss = _WinAPI_EnumWindows()
                        For $n = 1 To $aWindowss[0][0]
                                If WinGetProcess($aWindowss[$n][0]) = $pid Then
                                        _ArrayAdd($avArray, $aWindowss[$n][0])
                                EndIf                               
                        Next
                        _ArrayDisplay($avArray, "PID:"&WinGetProcess($aWindows[$i][0]))
        Next
EndFunc   ;==>_Main
 楼主| 发表于 2014-6-17 18:56:12 | 显示全部楼层
楼上高手正解。感谢。

我在论坛上搜索到了另一种,也是可以。
#Include <Array.au3>
#include <Process.au3>
#Include <WinAPIEx.au3>

Opt('MustDeclareVars', 1)

Global $Processid = ProcessList("要获取的窗口程序.exe")
Global $aWindows,$i
$aWindows = _WinAPI_EnumProcessWindows($Processid[1][1], FALSE)
Global $i = $aWindows[1][0]
Global $aWindows2,$i2
$aWindows2 = _WinAPI_EnumChildWindows ($i, FALSE)

_ArrayDisplay($aWindows2, '枚举指定窗口子句柄')
 楼主| 发表于 2014-6-17 19:01:20 | 显示全部楼层
_WinAPI_EnumChildWindows  关键函数
发表于 2016-4-6 10:18:10 | 显示全部楼层
本帖最后由 zps26 于 2016-4-9 15:09 编辑

回复 5# siton

怎么得到任何一个窗口所有的控件(子窗口)的句柄(已解决)
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-1 09:30 , Processed in 0.077851 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表