找回密码
 加入
搜索
查看: 21268|回复: 50

[AU3基础] (已解决)请教如何获得气泡提示窗口中的文字?

 火.. [复制链接]
发表于 2012-11-16 16:14:43 | 显示全部楼层 |阅读模式
本帖最后由 yufei8051 于 2012-11-20 16:17 编辑

好像取不到啊,它弹出来的时候是不是就已经激活了呢?
用下面的代码,有窗口弹出也不显示,必须点击一下气泡窗口才行。气泡窗口的句柄是:0x0003051A
ControlFocus("","",0x0003051A);激活"气泡窗口""对话框
        Local $Getstringx=WinGetText ("[active]") ;获取对话框字符串
                
        
        If StringInStr ($Getstringx, "【动物园】")>0 Then 
                MsgBox(262149,"测试  :",$Getstringx,10)
endif

比如上面图的那个气泡窗口。
我的想法是,写一个脚本,让它监视有否气泡窗口弹出,若有则获取其内容写到一个文件中,重复此过程。
哪位大侠给个方法?楼下链接没看明白啊,水平太菜

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2012-11-16 17:26:05 | 显示全部楼层
autoitx.com/forum.php?mod=viewthread&tid=30395
内容相关,可惜没看懂。
继续研究
发表于 2012-11-16 18:22:34 | 显示全部楼层
看长相也不是气泡,零件多了点…
 楼主| 发表于 2012-11-16 19:18:57 | 显示全部楼层
感谢超版关注回复。
但它确实是从气泡那儿冒出来的,用信息工具也看不到控件,也没有窗口标题,有句柄。
还有 用信息工具看, 黑体字的窗体标题那文字其实都是内容
回去我把信息工具的截图发上来。
发表于 2012-11-16 23:00:41 | 显示全部楼层

内容

本帖最后由 半芯竹 于 2012-11-16 23:04 编辑

回复 1# yufei8051


   
#Include <Date.au3>
Local $a,$b
While 1
If WinExists ("【动物园】") then
         $a=WinGetText ("【动物园】") 
        If $b <> $a Then 
        IniWrite("my.ini", "记录", _NowTime(), $a )
        $b=$a
EndIf 
Else
        $b=''
EndIf
        Sleep(300)
WEnd 


如果获取到的,都是窗体内容,那就这样尝试:
#Include <Date.au3>
Local $a,$b
While 1
If WinExists ('',"【动物园】") then
         $a=WinGetText ('',"【动物园】") 
        If $b <> $a Then 
        IniWrite("my.ini", "记录", _NowTime(), $a )
        $b=$a
EndIf 
Else
        $b=''
EndIf
        Sleep(300)
WEnd
 楼主| 发表于 2012-11-17 15:19:50 | 显示全部楼层
回复  yufei8051


   
如果获取到的,都是窗体内容,那就这样尝试:
半芯竹 发表于 2012-11-16 23:00



    感谢你的关注。
经试验,第一段代码好像不行。
第二段代码可以取到气泡窗口的数据,问题是,不仅仅有气泡提示窗口的,所有激活窗口的信息都有,有点乱。
我想只提取气泡窗口的文本。请问怎么改一下?
 楼主| 发表于 2012-11-17 15:30:42 | 显示全部楼层
回复 3# afan
气泡窗口:


这是用信息工具查到的:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2012-11-17 16:10:53 | 显示全部楼层
本帖最后由 yufei8051 于 2012-11-17 16:12 编辑

回复 5# 半芯竹


用了你的第二段代码, 基本解决。
#Include <Date.au3>
Local $a,$b,$a1,$a2
While 1
If WinExists ('',"灌水贴") then
                 $a1=ControlGetText("","灌水贴","[CLASS:Static; INSTANCE:4]")
         $a2=ControlGetText("","灌水贴","[CLASS:Static; INSTANCE:2]") 
                 $a=$a1&$a2
        If $b <> $a Then 
        IniWrite("my.ini", "记录", _NowTime(), $a)
                _TalkOBJ($a)
        $b=$a
EndIf 
Else
        $b=''
EndIf
        Sleep(300)
WEnd
        
;文本语言朗读
;_TalkOBJ('This is auto it beta speaking.')
_TalkOBJ($a)
Func _TalkOBJ($s_text)
  Local $o_speech = ObjCreate("SAPI.SpVoice")
  $o_speech.Speak($s_text)
  $o_speech = ""
EndFunc
我是这样计划的:把气泡窗口的文本写入文件,同时让他即时朗读。
目前看基本实现。
存在的问题:如果在朗读过程中有新气泡弹出,该条信息就不能写入文件也不会朗读,也就是说会丢包。
怎么解决这个问题?
发表于 2012-11-17 22:36:46 | 显示全部楼层
...存在的问题:如果在朗读过程中有新气泡弹出,该条信息就不能写入文件也不会朗读,也就是说会丢包 ...
yufei8051 发表于 2012-11-17 16:10
#include <Date.au3>

HotKeySet('{esc}', '_Exit')

Local $o_speech, $Flag = 0, $hWnd, $sTitle, $sTxt, $sLast, $sAll
AdlibRegister('_GetWinTxt')

While 1
        If $Flag Then
                If $sAll <> $sLast Then
                        FileWrite(@ScriptDir & '\my.txt', '[' & _NowTime() & ']' & @CRLF & $sAll & @CRLF & @CRLF)
                        $sLast = $sAll
                EndIf
                $o_speech = ObjCreate('SAPI.SpVoice')
                $o_speech.Speak($sTitle & @CRLF & $sAll, 1)
        Else
                Sleep(1)
        EndIf
WEnd

Func _GetWinTxt()
        $hWnd = WinGetHandle('[CLASS:#32770]', '设置关注')
        If Not $hWnd Then
                $Flag = 0
                Return 0
        EndIf
        $sTitle = ControlGetText($hWnd, '', '[CLASS:Static; INSTANCE:4]')
        $sTxt = ControlGetText($hWnd, '', '[CLASS:Static; INSTANCE:2]')
        $sAll = $sTitle & @CRLF & $sTxt
        If $sAll == $sLast Then
                $Flag = 0
                Return 0
        EndIf
        $Flag = 1
EndFunc   ;==>_GetWinTxt

Func _Exit()
        Exit
EndFunc   ;==>_Exit
 楼主| 发表于 2012-11-18 12:59:33 | 显示全部楼层
本帖最后由 yufei8051 于 2012-11-18 13:07 编辑

回复 9# afan
感谢超版回复。
经试验,代码工作正常,可以达到效果。
多次测试后问题又来了,像
CLASS:Static; INSTANCE:4]'
CLASS:Static; INSTANCE:2]'
之类的数值是会变的,所以有时能行,有时不行。
所以我想只能用

                $hWnd = WinGetHandle("[CLASS:#32770]","设置关注")
                $sAllstring = WinGetText($hWnd) ;获取所有文本

先读出所有字符串,然后再把各个部分分别取出来,这样肯定就没问题了。

如图:


取出的字符串分为几部分,如图中方框所示,其中第一行是空行,第二行是发言内容,第三行是发言者网名,第四行是显示在气泡窗口上面的黑体字的标题,下面的不用关注。
请教怎么分别取出这几部分?用StringLeft 之类的函数没法达到目的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2012-11-18 13:05:54 | 显示全部楼层
有句柄就好说了,用api去取
 楼主| 发表于 2012-11-18 13:08:02 | 显示全部楼层
回复 11# netegg


    能详细说下嘛?
 楼主| 发表于 2012-11-18 13:25:41 | 显示全部楼层
回复 10# yufei8051


    用什么函数可以取出字符串中从开始到第一个回车之间的字符?
   包括取出从第二个回车到第三个回车之间的所有字符?
发表于 2012-11-18 14:26:25 | 显示全部楼层
 楼主| 发表于 2012-11-18 15:23:38 | 显示全部楼层
回复 14# netegg


    感谢回复。
可惜都是英文,看不懂啊。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-16 15:34 , Processed in 0.142880 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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