找回密码
 加入
搜索
查看: 14156|回复: 33

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

 火.. [复制链接]
发表于 2010-3-10 12:17:31 | 显示全部楼层 |阅读模式
本帖最后由 haorui658 于 2010-3-13 01:09 编辑

例如系统的属性对话框 就是#32770,我要控制一个多语言的软件(标题不一样,有N多种语言)也是#32770,但是一打开系统的属性对话框 或者其它的类为#32770的窗口,就不能控制了,大家有什么好的办法做到通一个程序通用吗?

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

 楼主| 发表于 2010-3-10 20:33:51 | 显示全部楼层
没有人知道吗???伤心了
发表于 2010-3-10 21:17:45 | 显示全部楼层
这个多语言的软件是你Run调用的吗
 楼主| 发表于 2010-3-10 22:59:41 | 显示全部楼层
恩,是的,但是这有什么区别吗?
 楼主| 发表于 2010-3-10 23:03:58 | 显示全部楼层
回复 3# afan

这个软件比较特别,运行后前几个界面是一个窗口,后面又是一个窗口,有多语言版本(包括简中,繁中,英文,德文),就是安装界面是多语言的,只有窗口类不变,按钮的控件ID不变
发表于 2010-3-10 23:13:14 | 显示全部楼层
以前写过一个通过Run的Pid获取标题的函数,得找找……
 楼主| 发表于 2010-3-10 23:30:15 | 显示全部楼层
回复 6# afan


    ????pid还能获得窗口标题,好东西
发表于 2010-3-10 23:47:42 | 显示全部楼层
找到了,我再测试下
 楼主| 发表于 2010-3-10 23:51:55 | 显示全部楼层
回复 8# afan


    好的,谢谢啊,每次我的问题都是你解决的,太感谢了
发表于 2010-3-10 23:55:56 | 显示全部楼层
本帖最后由 afan 于 2010-3-11 00:01 编辑

回复 9# haorui658


    不用客气~~
说明下两个可选参数:
$Delay : 这个是指延时n毫秒后再获取,因为某些软件启动时标题会改变,当然一般不会改变
$timeout : 这个是指超过n毫秒仍未获取到则直接返回,当然获取到了会立即返回,所以设大些没问题
$pid = Run('Notepad.exe') ;例子1
MsgBox(0, @error, Pid2title($pid))
ProcessClose($pid)

$pid = Run(@ProgramFilesDir & '\Internet Explorer\IEXPLORE.EXE') ;例子2
MsgBox(0, @error, Pid2title($pid, 100))
ProcessClose($pid)

Func Pid2title($pid, $Delay = 10, $timeout = 10000)
        ;Afan提示:$pid即通过Run()返回的进程标识符,$Delay[可选]延时时间,$timeout[可选]超时时间。
        Local $begin = TimerInit(), $Info, $Runout, $title
        Do
                If ProcessExists($pid) <> 0 Then ExitLoop
        Until TimerDiff($begin) >= $timeout
        Sleep($Delay)
        If ProcessExists($pid) = 0 Then Return SetError(1, 0, 0)
        Do
                $Runout = Run('TASKLIST /V /FI "PID eq ' & $pid & '" /FO LIST', '', 0, 2)
                If @error Then Return SetError(2, 0, 0)
                Do
                        Sleep(1)
                        $Info &= StdoutRead($Runout)
                Until @error
                $title = StringRegExp($Info, '\n窗口标题\s+:\s*(.*)\r', 3)
                If Not @error Then
                        If $title[0] <> '暂缺' Then ;
                                Return $title[0]
                        Else
                                Sleep(100)
                                $Info = ''
                        EndIf
                EndIf
        Until TimerDiff($begin) >= $timeout
        Return SetError(3, 0, 0)
EndFunc   ;==>Pid2title
 楼主| 发表于 2010-3-11 00:01:14 | 显示全部楼层
回复 10# afan


    好东西,仔细研究下,再次感谢
发表于 2010-3-11 00:06:10 | 显示全部楼层
回复 11# haorui658


    别忘了反馈测试结果~ 呵呵
 楼主| 发表于 2010-3-11 00:26:09 | 显示全部楼层
回复 12# afan


    好的,一定反馈,我先试用几天,无论觉得好还是不好都会反馈的:)
发表于 2010-3-11 00:29:56 | 显示全部楼层
回复 13# haorui658


    目前使用正常否?
你的多语言软件是否解决了?
 楼主| 发表于 2010-3-11 12:51:55 | 显示全部楼层
回复 14# afan


    OMG,神奇了,整个安装过程,存在两个标题,第一次的时候成功获取了,但是第二次返回的是"Should not see me" ,我晕了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-1 07:57 , Processed in 0.103094 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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