回复 2# Alam #include <Array.au3>
#include <Constants.au3>
#include <WinAPI.au3>
;额,这个解释起来是一个非常漫长的工程。。。可以概括为:
;有一个EXE程序,我要监控其中的一个控件,这个控件,只有NAME是不变的,所以我采用的方案是:
;控件ID
$id = '[NAME:btEnter]'
;我的监控方案是:
While 1
If ControlCommand($title,'',$id,"IsVisible", "") Then
ControlClick($title,'',$id)
EndIf
Sleep(100)
WEnd
;但是因为这个EXE不是我写的,我不知道源码,所以我不确定exe里面还有没别的控件,ID也是 [NAME:btEnter]
;所以为了验证,
;我借助 WinListChildren()可以枚举得到所有控件的句柄,然后我想用这些得到的句柄,去再得到对应的NAME,用来判断整个exe里面,有没重复的NAME
;关于这个函数的用法,见:
; http://autoitx.com/forum.php?mod=viewthread&tid=32018&highlight=%BF%D8%BC%FE%2B%C1%D0%B1%ED
Func WinListChildren($hWnd, ByRef $avArr)
If UBound($avArr, 0) <> 2 Then
Local $avTmp[10][2] = [[0]]
$avArr = $avTmp
EndIf
Local $hChild = _WinAPI_GetWindow($hWnd, $GW_CHILD)
While $hChild
If $avArr[0][0]+1 > UBound($avArr, 1)-1 Then ReDim $avArr[$avArr[0][0]+10][2]
$avArr[$avArr[0][0]+1][0] = $hChild
$avArr[$avArr[0][0]+1][1] = _WinAPI_GetWindowText($hChild)
$avArr[0][0] += 1
WinListChildren($hChild, $avArr)
$hChild = _WinAPI_GetWindow($hChild, $GW_HWNDNEXT)
WEnd
ReDim $avArr[$avArr[0][0]+1][2]
EndFunc
|