afan
发表于 2010-3-11 12:58:15
回复afan
OMG,神奇了,整个安装过程,存在两个标题,第一次的时候成功获取了,但是第二次返回的是" ...
haorui658 发表于 2010-3-11 12:51 http://www.autoitx.com/images/common/back.gif
呵呵,确实很神奇……
它的实际标题是?
有没有适当加点延时?(默认为10ms)
haorui658
发表于 2010-3-11 13:06:59
我加的默认参数,10ms应该够了 窗口标题是PDA Phone ROM Update Utility 3.27.4.3
afan
发表于 2010-3-11 13:16:53
本帖最后由 afan 于 2010-3-11 13:22 编辑
回复 17# haorui658
那你试试加到 100? 500? 1000? 分别看看结果嘛
如果都无法获取正确的标题,那肯定是程序做了手脚,从那句 Should not see me 也可以瞧出点端倪……
那就改用获取句柄的形式……
我现在有事,晚上再来看看,你先慢慢试,多反馈些信息,有助解决问题
haorui658
发表于 2010-3-11 21:10:04
本帖最后由 haorui658 于 2010-3-11 21:16 编辑
回复 18# afan
恩 各种延时结果都是一样的,都是"should not see me",能不能通过pid获得句柄呢,肯定不能去用title再去获取句柄,要不然第二步的时候肯定不对,我知道AHK可以直接用pid作参数,但是AU3应该怎么判断呢?
haorui658
发表于 2010-3-11 22:43:01
找到获取句柄的方法了,试验中
haorui658
发表于 2010-3-12 09:07:23
Func Pid2Handle($pid)
$all = winlist()
For $i=1 To $all
If WinGetProcess($all[$i])=$pid Then
Return $all[$i]
ExitLoop
EndIf
Next
EndFunc奉上pid获得句柄的函数,我的问题还没有解决,第二次获得程序句柄和AU3 info中不一致,应该是程序做了手脚
afan
发表于 2010-3-12 12:51:52
回复 21# haorui658
你这样获取到的不一定是你要的窗口句柄,因为你获取到一个属于某个pid的句柄就立即返回了,而单个pid的句柄不一定只有一个,有些有很多个。
afan
发表于 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
For $i = 1 To $all
If WinGetProcess($all[$i]) = $pid Then
ReDim $pidHandle[$x + 1]
$pidHandle[$x] = $all[$i]
$pidHandle[$x] = $all[$i]
$x += 1
EndIf
Next
Return $pidHandle
EndFunc ;==>Pid2Handle
Func _Pid2Handle($pid) ;这个仅返回一个可见窗口的句柄
Local $all = WinList(), $i
For $i = 1 To $all
If WinGetProcess($all[$i]) = $pid And BitAND(WinGetState($all[$i]), 2) Then Return $all[$i]
Next
EndFunc ;==>_Pid2Handle
Func __Pid2Handle($pid) ;这个是返回所有可见窗口的2维数组,句柄对应标题
Local $all = WinList(), $i, $x = 0, $pidHandle
For $i = 1 To $all
If WinGetProcess($all[$i]) = $pid And BitAND(WinGetState($all[$i]), 2) Then
ReDim $pidHandle[$x + 1]
$pidHandle[$x] = $all[$i]
$pidHandle[$x] = $all[$i]
$x += 1
EndIf
Next
Return $pidHandle
EndFunc ;==>__Pid2Handle
haorui658
发表于 2010-3-12 23:07:26
回复 23# afan
太纠结了,上面的代码也是不行的,但是我剖析了一下程序,程序其实是一个自解压程序,解压后运行了另一个程序,也就是两个程序,自然pid不一样,那个程序的名字是固定的,所以只要用进程名获取相应的标题就好了,afan大大有相应的例子吗?我觉得这回的思路应该对了
afan
发表于 2010-3-13 00:00:17
回复afan
太纠结了,上面的代码也是不行的,但是我剖析了一下程序,程序其实是一个自解压程序,解压 ...
haorui658 发表于 2010-3-12 23:07 http://www.autoitx.com/images/common/back.gif
晕死,第一步就走错了……
ProcessList()
haorui658
发表于 2010-3-13 00:57:46
回复 25# afan
恩,确实,只对au3了解还不行,还得找对方法,这个弯路也学到不少东西,明天尝试一下,估计这回没有问题了
haorui658
发表于 2010-3-13 01:07:02
回复 25# afan
趁着兴奋劲儿,试了一下,成功获取到title了,谢谢afan大大,很稳定,很好用.安心睡啦
afan
发表于 2010-3-13 01:11:55
回复 27# haorui658
真替你高兴…… :face (33):
llztt
发表于 2010-3-13 07:25:25
afan 是个好男人,OYE
xwlzx
发表于 2010-3-16 08:16:37
高手,热心!令人兴奋!