找回密码
 加入
搜索
查看: 4012|回复: 6

[系统综合] 若窗口标题中带有"["和"]"符号,WinActive失效?[已解决]

[复制链接]
发表于 2013-2-12 17:25:31 | 显示全部楼层 |阅读模式
本帖最后由 ReMind 于 2013-2-17 00:18 编辑

使用WinActive函数时,若窗口标题中带有"["和"]"符号,则WinActive失效(不能激活窗口,也无法获取窗口中控件内容),请问如何处理?

PS:经测试,窗口标题中不带"["和"]"符号时,操作成功。
 楼主| 发表于 2013-2-12 18:23:09 | 显示全部楼层
补充说明:原标题格式为:“[XXXX1]-[XXX2]”,请注意第一字符和最后一个字符都是中括号;
因此拿记事本来作测试是有区别的,因为记事本无论如何改名,最终标题都是“ [XXX]-记事本 ”;
经测试“ [XXX]-记事本 ”这样的标题是可以成功使用winactive。
发表于 2013-2-12 19:13:59 | 显示全部楼层
回复 2# ReMind


    肯定会这样了,因为中括号有特殊用途,这时你要把它转义掉!

Opt("WinTitleMatchMode", 4)
$hWnd = WinGetHandle('[REGEXPTITLE:\[XXXX1\]-\[XXX2\]]')
 楼主| 发表于 2013-2-12 23:08:34 | 显示全部楼层
本帖最后由 ReMind 于 2013-2-12 23:12 编辑

谢谢 happytc 兄的指点。但按照您的提示修改,问题仍然没有解决。
现在发现原窗口一直有轻微的闪动现象,由于窗口界面数据需要跟其他部门实时同步,可能存在每秒刷新1次。
如果窗口是处于不停地刷新状态,这时使用WinActice是否能有效?

autoit 代码如下,如有错误请指出,谢谢!
$chehao = ""
Func Baoban()
    Do
         WinActivate("[售票系统] - [车辆报班登记]")
         $chehao = ControlGetText("[售票系统] - [车辆报班登记]", "", "[CLASS:Edit; INSTANCE:1]")
    Until $chehao <> ""
         MsgBox(0, "test", "内容=" & $chehao)

EndFunc   ;==>Baoban
        
While 1
        Baoban()
WEnd
发表于 2013-2-12 23:19:18 | 显示全部楼层
回复 4# ReMind


    看了你给的代码例子,怎么有点白说了,我没有见你把我上面给的代码加进去嘛
你先加进后再试吧
 楼主| 发表于 2013-2-13 23:35:02 | 显示全部楼层
我试过了下面的代码,仍然是不能获取某个输入框上的内容。
$chehao = ""
Func Baoban()
        Opt("WinTitleMatchMode", 4)
        $hWnd = WinGetHandle('[REGEXPTITLE:\[售票系统\] - \[车辆报班登记\]]')
        WinWaitActive($hWnd)
        Do
                WinActive($hWnd)
                $chehao = ControlGetText($hWnd, "", "[CLASS:Edit; INSTANCE:16]")

        Until $chehao <> ""
        MsgBox(0, "test", "车号=" & $chehao)
EndFunc   ;==>Baoban
While 1
        Baoban()
        Sleep(5000)
        MsgBox(0, "test2", "5秒后刷新!")
WEnd
 楼主| 发表于 2013-2-17 00:16:14 | 显示全部楼层
问题已解决。经实践,在winactive中使用 "[CLASS name]" 代替 "标题" 即可。
代码如下:
$chehao = ""
Func Baoban()
        WinWaitActive("[CLASS:your-classname]")
        Do
                WinActive("[CLASS:your-classname]")
                $chehao = ControlGetText("[CLASS:your-classname]", "", "[CLASS:Edit; INSTANCE:16]")

        Until $chehao <> ""
        MsgBox(0, "test", "车号=" & $chehao)
EndFunc   ;==>Baoban
While 1
        Baoban()
        Sleep(5000)
        MsgBox(0, "test2", "5秒后刷新!",5)
WEnd
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-15 13:30 , Processed in 0.079336 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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