找回密码
 加入
搜索
查看: 3136|回复: 3

[AU3基础] 请教个问题,得到一个句柄HANDLE,如何msgbox这个句柄窗口的title?

[复制链接]
发表于 2010-7-2 15:57:48 | 显示全部楼层 |阅读模式
如得到了$tjHandle,这个是一个窗口的句柄
msgbox它的title名字?

第二个问题是,我得到了一个二维数组的变量,如何知道究竟有数组多少有效范围?
这个是上次afan大大出手的代码,我为了练手,改为Return $pidHandle[3][1],但我想把这个数组历遍式地逐个返回handle的tiitle,是不是含有“结果”这个字眼而做if判断,而不是指定的[3][1],应该怎么做呢?
;找到MIM进程PID
$list = ProcessList("tj.exe")
 
;输出MIM进程PID
;msgbox(0,"结果",$list[1][1])

;得到PID号
$PID = $list[1][1];

;得到PID的句柄
$tjHandle = _Pid2Handle($PID)

;msgbox(0,"显示句柄",$tjHandle)

;If $MIMHandle = true Then
;    MsgBox(0, "示例", "有handle")
;Else
;    MsgBox(0, "示例", "无handle")
;EndIf


WinKill($tjHandle,"")


Func _Pid2Handle($PID)
        ;Afan提示:通过进程pid返回包含其可见窗口标题和句柄的二维数组
        Local $Whall, $i, $pidHandle[1][2] = [[0]], $x = 1
        $Whall = WinList()
        For $i = 1 To $Whall[0][0]
                If WinGetProcess($Whall[$i][1]) = $PID And BitAND(WinGetState($Whall[$i][1]), 2) Then
                        ReDim $pidHandle[$x + 1][2]
                        $pidHandle[0][0] += 1
                        $pidHandle[$x][1] = $Whall[$i][1]
                        $pidHandle[$x][0] = $Whall[$i][0]
                        $x += 1
                EndIf
        Next
        Return $pidHandle[3][1]
EndFunc   ;==>_Pid2Handle
发表于 2010-7-2 16:04:22 | 显示全部楼层
Msgbox(0, 0, WinGetTitle($tjHandle))
第二个问题还没看懂
 楼主| 发表于 2010-7-2 16:07:23 | 显示全部楼层
本帖最后由 sanfer8889 于 2010-7-2 16:11 编辑

我的理解是:
_Pid2Handle($PID)函数里的$pidHandle,是一个数组吧?
$PID应该是有多个窗口的进程,如何获得他们全部窗口的title呢?
而得到的tjHANDLE,应该如何获得完整的title列表呢?
Return $pidHandle[3][1]是我手工对比出来的目标窗口,但有时候不存在,有时候又有,
所以打算拿到整个列表做个判断,再来靠title判断出目标窗口,发送点击等动作。。。
谢谢!
发表于 2010-7-2 16:21:37 | 显示全部楼层
;找到MIM进程PID
$list = ProcessList("tj.exe")

;输出MIM进程PID
;msgbox(0,"结果",$list[1][1])

;得到PID号
$PID = $list[1][1];

;得到PID的标题与句柄的2维数组
$tj = _Pid2Handle($PID)

For $i = 1 to $tj[0][0]
        If StringInStr($tj[$i][0], '结果') Then Msgbox(0, '窗口句柄:' & $tj[$i][1], '窗口标题:' & $tj[$i][0] & @LF & '含有“结果”字样。')
Next


Func _Pid2Handle($PID)
        ;Afan提示:通过进程pid返回包含其可见窗口标题和句柄的二维数组
        Local $Whall, $i, $pidHandle[1][2] = [[0]], $x = 1
        $Whall = WinList()
        For $i = 1 To $Whall[0][0]
                If WinGetProcess($Whall[$i][1]) = $PID And BitAND(WinGetState($Whall[$i][1]), 2) Then
                        ReDim $pidHandle[$x + 1][2]
                        $pidHandle[0][0] += 1
                        $pidHandle[$x][1] = $Whall[$i][1]
                        $pidHandle[$x][0] = $Whall[$i][0]
                        $x += 1
                EndIf
        Next
        Return $pidHandle
EndFunc   ;==>_Pid2Handle

评分

参与人数 1金钱 +10 收起 理由
sanfer8889 + 10 真猛啊!!!

查看全部评分

您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-22 04:19 , Processed in 0.085674 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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