已解决 如何读取状态栏显示的文本内容
本帖最后由 itzyx 于 2020-12-7 23:45 编辑如图所示,我用A大的 "窗口探测器”,读取到的 控件信息,但是用代码#include <MsgBoxConstants.au3>Local $sText = StatusbarGetText ( "title" [, "text" [, part = 1]] )
MsgBox($MB_SYSTEMMODAL, "",$sText)
貌似没有用,浏览了一下网站曾经的有关提问, 好像也没有得到实际的解决,心存侥幸的再问一下,各位大佬有办法嘛。谢谢了
解决办法:确实 不是windows标准控件(msctls_statusbar32),不能用StatusbarGetText获取文本。 最后还是感谢A大,提出用 PixelGetColor 这个函数找色 ,通过特征比较状态变化,学习新知识了
本帖最后由 afan 于 2020-12-8 12:06 编辑
如果在测试中会匹配到其它字符,那就证明采的点唯一性特征不强,需要调整采点坐标
如果实在不会采点,如我3#所说,也可以用找图的方式,这个不需要多少判断,截个小图就行,不过码代码难度可能就大一点(不像 PixelGetColor 一个函数搞定),需要找一些截图和比对的udf学习下。这种可定点找图,效率也是极高的,检测这种小图在我老机器上也仅需2~3毫秒。
找10个色点的方式更快了,不到1毫秒
还可以用区域校验的方式去匹配,更快,0.3毫秒
这是使用工具进行的比对验证,还有很多技巧需要LZ自行研究,没有代码,没法建议。
itzyx 发表于 2020-12-7 13:50
好的 谢谢A大,我先用你给的工具 找色,分析状态的区别, 再用例子来应用,这个如果能应用好,感觉对以后 ...
工具获取的已是标准的十六进制RGB色值,PixelGetColor 获取的是十进制,可用 Hex(PixelGetColor(...) , 6) 统一 itzyx 发表于 2020-12-2 17:47
发哥,还是非常感谢你的帮助, 但是我这边有权限 限制,软件没办法上传, 只能作罢了,不好意思了
小伙子,不讲武德,我大意啦哈没有闪!:face (31): 顺便再说一下我的想法,我想检测一个物品的工作状态(用对应软件连接检测的),之前用 _WinAPI_SendMessageTimeout 这个函数,没办法得到一个准确的反馈的情况,比如软件断开连接,切换状态等等,我现在想通过读取软件 状态栏的数据显示,判断测试物品的状态,比如,如图所示 0FPS,就表示测试的物品此刻有问题了 不是windows标准控件(msctls_statusbar32),不能用StatusbarGetText获取文本。
但如果状态栏字符信息如图示固定的话,可以用找图或检测坐标点色值的方式,也简单易行
afan 发表于 2020-11-30 23:14
不是windows标准控件(msctls_statusbar32),不能用StatusbarGetText获取文本。
但如果状态栏字符信息如图 ...
A大能帮忙举个例子嘛 itzyx 发表于 2020-11-30 23:22
A大能帮忙举个例子嘛
找图测色这类操作,各自的系统环境样本都可能不一样,因此不好简单举例。
简单说一下方法吧:
用相关工具截图(或采点)及相关坐标信息,样本图片(或采点坐标)应尽量小且图像像素具备唯一特征。
如有多个触发条件则采集多份。
用论坛大把的找图代码进行找图(采点方式可直接检测坐标点颜色)。
以下本人写的工具可助力
屏幕巡查
PixelCatcher afan 发表于 2020-11-30 23:54
找图测色这类操作,各自的系统环境样本都可能不一样,因此不好简单举例。
简单说一下方法吧:
用相关工 ...
好嘞 谢谢A大我来试试 {:1_281:} afan 发表于 2020-11-30 23:54
找图测色这类操作,各自的系统环境样本都可能不一样,因此不好简单举例。
简单说一下方法吧:
用相关工 ...
A大 我用你的工具 采集到了坐标点颜色,下面的话,该怎么进行呢,用函数巡捕查找,跟论坛搜索,都没有这类的介绍,实属有点找不到方向了, 还有系统环境样本不一样,是不是意思这类操作没办法换电脑测试了 本帖最后由 afan 于 2020-12-1 12:27 编辑
itzyx 发表于 2020-12-1 11:08
A大 我用你的工具 采集到了坐标点颜色,下面的话,该怎么进行呢,用函数巡捕查找,跟论坛搜索,都没有这 ...
如果你在这方面没有入门,那么跟你解释可能要花费一天,显然不可能,没这时间。
搜索 PixelGetColor 自己研究吧
换电脑当然可以,看你程序的设计了。
afan 发表于 2020-12-1 12:25
如果你在这方面没有入门,那么跟你解释可能要花费一天,显然不可能,没这时间。
搜索 PixelGetColor 自 ...
嗯 好的, 显然A大你说对了,这方面我是一窍不通, 我先自己研究研究, 感觉学会的话,挺有用的 itzyx 发表于 2020-12-1 12:41
嗯 好的, 显然A大你说对了,这方面我是一窍不通, 我先自己研究研究, 感觉学会的话,挺有用的
这个是终极方法,一般在无法简单获知数据时使用,在自动化操控方面可谓万能。
先从最简单的像素点获取>进行比对,达到目的入门,进一步接触分辨率、DPI、窗口前台后台、窗口分层结构等等,研究透了使用该方法也非常简单高效。 想获取什么呢?
haijie1223 发表于 2020-12-1 17:19
想获取什么呢?
发哥,我想获取状态栏的数据,比如,如我上传图所示 的 0.00FPS,就表示我用软件测试的对应物品,此刻有问题了, 因为人不可能一直监测软件的测试状态,_WinAPI_SendMessageTimeout测试的是软件有无响应,但是对应测试物品,出现的硬件问题 就没办法通过函数获取了(我确实没找到) ,只能通过读取软件显示的状态, 来判断测试物品是否出现问题 itzyx 发表于 2020-12-1 17:58
发哥,我想获取状态栏的数据,比如,如我上传图所示 的 0.00FPS,就表示我用软件测试的对应物品,此刻有 ...
#Include <GuiStatusBar.au3>
_GUICtrlStatusBar_GetText($hWnd, $iPart)
用这个命令试试 haijie1223 发表于 2020-12-1 18:24
#Include
_GUICtrlStatusBar_GetText($hWnd, $iPart)
用这个命令试试
发哥,这个我试了也不行#Include <GuiStatusBar.au3>
local $hWnd=ControlGetHandle('控制系统','','Afx:StatusBar:aeab0000:8:10003:101')
local $text=_GUICtrlStatusBar_GetText($hWnd, 0)
MsgBox(0,'',$text)
这里的控件类名好长,不知道写的对不对,我从0基索引开始试的,结果是没读取出来. itzyx 发表于 2020-12-1 19:43
发哥,这个我试了也不行
这里的控件类名好长,不知道写的对不对,我从0基索引开始试的,结果是没读取 ...
你输出看下Hwnd获取到的对不对。