sanfer8889 发表于 2010-6-23 16:14:04

针对这样的程序,想做这样的操作,请教思路和关键函数。。。(内详)

本帖最后由 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,
直接往这个对话框上的某个按钮/菜单模拟点击一下? 谢谢!

afan 发表于 2010-6-23 16:19:04

基本思路就是用窗口句柄操作

sanfer8889 发表于 2010-6-23 16:22:03

本帖最后由 sanfer8889 于 2010-6-23 16:26 编辑

titile不固定,如何获得句柄?
如果按tj.exe的Process来确定,那么它至少有1+N个窗口的可能性。

afan 发表于 2010-6-23 16:48:08

本帖最后由 afan 于 2010-6-23 16:57 编辑

通过进程pid获取可见窗口,这里按你的描述应该最多就2个可见窗口。
这样的话可以再进行筛选,双击托盘的弹出窗口应该不会改变标题,可以此作为筛选条件,剩下的那个就是你要的了。

yejier1983 发表于 2010-6-23 21:21:12

考虑挺全面的嘛呵呵

sanfer8889 发表于 2010-6-25 11:52:46

我已经获得tj.exe的进程PID号为tjid变量了,
请问应该用什么函数语句来得到所有窗口tiitle?
谢谢解答!

afan 发表于 2010-6-25 12:28:19

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]
查看完整版本: 针对这样的程序,想做这样的操作,请教思路和关键函数。。。(内详)