kob5891 发表于 2008-9-10 11:23:25

[已解决] 怎么获得lable标签控件上的字啊?

本帖最后由 kob5891 于 2010-6-14 11:53 编辑

用au3窗口信息工具根本得不到 控件ID
用guictrlread所提供的类型中也没有标签控件

怎样才能获得lable标签控件上的字符?各位大哥帮忙呀,这个问题困惑我好几天了。


附件是用VB6.0做的一个 “label=程序 和 commandbutton=确定”   两个控件



版主能否给个实例,讲解一下。

我对画面的处理及文字识别没有做过。

有些软件只能抓到窗口,其它什么也抓不到。对这些软件用图象处理加文字识别可能会更好些。

麻烦版主了。



是屏幕取词OK

[ 本帖最后由 kob5891 于 2008-10-21 10:03 编辑 ]

顽固不化 发表于 2008-9-10 11:54:31

获取自己本身的控件,用GUICtrlRead()函数。
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 363, 183, 193, 125)
$Label1 = GUICtrlCreateLabel("我不是Label控件吗?", 80, 16, 190, 28)
GUICtrlSetFont(-1, 14, 400, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0xFF0000)
$Button1 = GUICtrlCreateButton("获取", 112, 120, 121, 25, 0)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Button1
                        MsgBox(0,"",GUICtrlRead($Label1))
        EndSwitch
WEnd

kob5891 发表于 2008-9-10 11:57:57

谢谢2楼的兄弟
你说的是已经知道控件ID的 “$Label1”

我的意思是说 得到第三方软件上的lable

顽固不化 发表于 2008-9-10 12:03:09

关于第三方的“Label”,你应该用au3的窗口信息工具去确定其是否是Label,如果信息工具都没法获取其文本的话,就比较难了。
获取第三方文本的函数并不是GUI开头的,这个你要明白,第三方窗口控制应该是“窗口控制函数”,如:ControlGetText ()

[ 本帖最后由 顽固不化 于 2008-9-10 12:05 编辑 ]

asdf 发表于 2008-9-10 12:28:14

会被认为是static,可以用ControlGetText。

kob5891 发表于 2008-9-10 14:42:09

我用VB做了个lable
ControlGetText("程序","确定") 提示错误ERROR: ControlGetText() called with wrong number of args.

仿照控件ID的写法加上后边的 ControlGetText("程序","确定","ThunderRT6Label1") 还是不行,又改了改ThunderRT6LabelBox等等,还是没有得到label中文本。

还有没有别的办法可以获取

顽固不化 发表于 2008-9-10 15:33:56

原帖由 kob5891 于 2008-9-10 14:42 发表 http://www.autoitx.com/images/common/back.gif
我用VB做了个lable
ControlGetText("程序","确定") 提示错误ERROR: ControlGetText()called with wrong number of args.

仿照控件ID的写法加上后边的 ControlGetText("程序","确定","ThunderRT6Label1") 还是不 ...

这不是你怎样改控件名称的问题,名称用信息工具获取的最正确。你发上来VB的EXE我们看看,怎么看名称与迅雷有关哦。

顽固不化 发表于 2008-9-10 15:48:06

例子:
run("驱逐舰升级工具2.5.exe")
WinWaitActive("驱逐舰升级工具2008")
MsgBox(0,"","最下行label的文本是:"&ControlGetText("驱逐舰升级工具","","Static2"))


kob5891 发表于 2008-9-10 15:56:51

回复 8# 顽固不化 的帖子

If WinWaitActive("Form1") Then
        $label=ControlGetText("Form1","确定","Static1") ;Static2也试过了,不行。
        MsgBox(0,"",$label)
EndIf
Exit

msgbox中应该是“程序”,可结果是什么也没有。

顽固不化 发表于 2008-9-10 16:11:22

看了,可能VB编程中的LABEL被特殊处理了。没法显示“程序”是一个控件。

kob5891 发表于 2008-9-10 16:33:12

回复 10# 顽固不化 的帖子

那有别的什么办法吗

asdf 发表于 2008-9-10 22:07:48

例子:
ControlGetText("窗口标题","","Static1")
不是所有lable都是能够获取的。

asdf 发表于 2008-9-10 22:16:28

如果lable是直接以点阵形式打印到窗口上的话,那是很难获取的,只能考屏幕取词或跟踪GDI+调用--都太难了

netegg 发表于 2008-9-16 11:41:34

抓id应该可以吧

pcbar 发表于 2008-9-16 16:26:35

看了一下,确实捕捉不到,唯一的方法,截取当前窗口的画面,调用外部文字识别程序识别
页: [1] 2 3
查看完整版本: [已解决] 怎么获得lable标签控件上的字啊?