找回密码
 加入
搜索
楼主: haorui658

[GUI管理] 为什么这么多窗口的类都是#32770?感谢afan[已解决]

 火.. [复制链接]
发表于 2010-3-11 12:58:15 | 显示全部楼层
回复  afan


    OMG,神奇了,整个安装过程,存在两个标题,第一次的时候成功获取了,但是第二次返回的是" ...
haorui658 发表于 2010-3-11 12:51



    呵呵,确实很神奇……
它的实际标题是?
有没有适当加点延时?(默认为10ms)
 楼主| 发表于 2010-3-11 13:06:59 | 显示全部楼层
我加的默认参数,10ms应该够了 窗口标题是PDA Phone ROM Update Utility 3.27.4.3
发表于 2010-3-11 13:16:53 | 显示全部楼层
本帖最后由 afan 于 2010-3-11 13:22 编辑

回复 17# haorui658


    那你试试加到 100? 500? 1000? 分别看看结果嘛
如果都无法获取正确的标题,那肯定是程序做了手脚,从那句 Should not see me 也可以瞧出点端倪……
那就改用获取句柄的形式……
我现在有事,晚上再来看看,你先慢慢试,多反馈些信息,有助解决问题
 楼主| 发表于 2010-3-11 21:10:04 | 显示全部楼层
本帖最后由 haorui658 于 2010-3-11 21:16 编辑

回复 18# afan


    恩 各种延时结果都是一样的,都是"should not see me",能不能通过pid获得句柄呢,肯定不能去用title再去获取句柄,要不然第二步的时候肯定不对,我知道AHK可以直接用pid作参数,但是AU3应该怎么判断呢?
 楼主| 发表于 2010-3-11 22:43:01 | 显示全部楼层
找到获取句柄的方法了,试验中
 楼主| 发表于 2010-3-12 09:07:23 | 显示全部楼层
Func Pid2Handle($pid)
    $all = winlist()
    For $i=1 To $all[0][0]
            If WinGetProcess($all[$i][1])=$pid Then
                    Return $all[$i][1]
                    ExitLoop
            EndIf
    Next
EndFunc
奉上pid获得句柄的函数,我的问题还没有解决,第二次获得程序句柄和AU3 info中不一致,应该是程序做了手脚
发表于 2010-3-12 12:51:52 | 显示全部楼层
回复 21# haorui658


    你这样获取到的不一定是你要的窗口句柄,因为你获取到一个属于某个pid的句柄就立即返回了,而单个pid的句柄不一定只有一个,有些有很多个。
发表于 2010-3-12 14:02:09 | 显示全部楼层
本帖最后由 afan 于 2010-3-12 16:38 编辑

以下3个修改函数你可以试试~
Func Pid2Handle($pid) ;这个是返回一个2维数组,句柄对应标题,你看看某个pid有多少个句柄...
        Local $all = WinList(), $i, $x = 0, $pidHandle[1][2]
        For $i = 1 To $all[0][0]
                If WinGetProcess($all[$i][1]) = $pid Then
                        ReDim $pidHandle[$x + 1][2]
                        $pidHandle[$x][0] = $all[$i][1]
                        $pidHandle[$x][1] = $all[$i][0]
                        $x += 1
                EndIf
        Next
        Return $pidHandle
EndFunc   ;==>Pid2Handle

Func _Pid2Handle($pid) ;这个仅返回一个可见窗口的句柄
        Local $all = WinList(), $i
        For $i = 1 To $all[0][0]
                If WinGetProcess($all[$i][1]) = $pid And BitAND(WinGetState($all[$i][1]), 2) Then Return $all[$i][1]
        Next
EndFunc   ;==>_Pid2Handle

Func __Pid2Handle($pid) ;这个是返回所有可见窗口的2维数组,句柄对应标题
        Local $all = WinList(), $i, $x = 0, $pidHandle[1][2]
        For $i = 1 To $all[0][0]
                If WinGetProcess($all[$i][1]) = $pid And BitAND(WinGetState($all[$i][1]), 2) Then
                        ReDim $pidHandle[$x + 1][2]
                        $pidHandle[$x][0] = $all[$i][1]
                        $pidHandle[$x][1] = $all[$i][0]
                        $x += 1
                EndIf
        Next
        Return $pidHandle
EndFunc   ;==>__Pid2Handle
 楼主| 发表于 2010-3-12 23:07:26 | 显示全部楼层
回复 23# afan


    太纠结了,上面的代码也是不行的,但是我剖析了一下程序,程序其实是一个自解压程序,解压后运行了另一个程序,也就是两个程序,自然pid不一样,那个程序的名字是固定的,所以只要用进程名获取相应的标题就好了,afan大大有相应的例子吗?我觉得这回的思路应该对了
发表于 2010-3-13 00:00:17 | 显示全部楼层
回复  afan


    太纠结了,上面的代码也是不行的,但是我剖析了一下程序,程序其实是一个自解压程序,解压 ...
haorui658 发表于 2010-3-12 23:07



    晕死,第一步就走错了……
ProcessList()
 楼主| 发表于 2010-3-13 00:57:46 | 显示全部楼层
回复 25# afan


    恩,确实,只对au3了解还不行,还得找对方法,这个弯路也学到不少东西,明天尝试一下,估计这回没有问题了
 楼主| 发表于 2010-3-13 01:07:02 | 显示全部楼层
回复 25# afan


    趁着兴奋劲儿,试了一下,成功获取到title了,谢谢afan大大,很稳定,很好用.安心睡啦
发表于 2010-3-13 01:11:55 | 显示全部楼层
回复 27# haorui658


    真替你高兴……
发表于 2010-3-13 07:25:25 | 显示全部楼层
afan 是个好男人,OYE
发表于 2010-3-16 08:16:37 | 显示全部楼层
高手,热心!令人兴奋!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-1 06:57 , Processed in 0.094182 second(s), 14 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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