针对这样的程序,想做这样的操作,请教思路和关键函数。。。(内详)
本帖最后由 sanfer8889 于 2010-6-23 16:20 编辑有个显示统计结果的程序,只有一个tj.exe,运行后也是这一个tj.exe进程而已
有托盘图标,双击它会出现一个面板对话框,适当时候有结果会弹出另外一个结果对话框
也就是说,tj.exe进程会有两个对话框,面板对话框在任务栏上不出现。
AutoIt只对结果对话框,结果对话框类似微软 Office Excel那样,
一个主框,里面有Sheet1,Sheet2...那样的Tab标签,
这里有个很难搞的地方,就是结果对话框的Title跟随当前焦点Tab的内容名称,
每个Tab焦点的内容针对每次都不一样的,切换一下Tab,结果对话框Title又跟随变,
也就是说很难在任务栏众多的窗口中,以固定Title来判断出结果对话框,
Active成为当前系统的焦点窗口,再做一些窗口上点击按钮之类的操作。
而一个tj.exe会有两个窗口存在。
一个结果对话框最多能容下5个Tab,第六个Tab,会再生新的另一个结果对话框,成为它的第一个Tab,
如此类推,可以有N个结果对话框。。。
请教高手们,有什么思路把这个不固定Title的结果对话框给Active,或者不Active,
直接往这个对话框上的某个按钮/菜单模拟点击一下? 谢谢! 基本思路就是用窗口句柄操作 本帖最后由 sanfer8889 于 2010-6-23 16:26 编辑
titile不固定,如何获得句柄?
如果按tj.exe的Process来确定,那么它至少有1+N个窗口的可能性。 本帖最后由 afan 于 2010-6-23 16:57 编辑
通过进程pid获取可见窗口,这里按你的描述应该最多就2个可见窗口。
这样的话可以再进行筛选,双击托盘的弹出窗口应该不会改变标题,可以此作为筛选条件,剩下的那个就是你要的了。 考虑挺全面的嘛呵呵 我已经获得tj.exe的进程PID号为tjid变量了,
请问应该用什么函数语句来得到所有窗口tiitle?
谢谢解答! Func _Pid2Handle($PID)
;Afan提示:通过进程pid返回包含其可见窗口标题和句柄的二维数组
Local $Whall, $i, $pidHandle = [], $x = 1
$Whall = WinList()
For $i = 1 To $Whall
If WinGetProcess($Whall[$i]) = $PID And BitAND(WinGetState($Whall[$i]), 2) Then
ReDim $pidHandle[$x + 1]
$pidHandle += 1
$pidHandle[$x] = $Whall[$i]
$pidHandle[$x] = $Whall[$i]
$x += 1
EndIf
Next
Return $pidHandle
EndFunc ;==>_Pid2Handle
页:
[1]