itzyx 发表于 2020-11-30 23:00:51

已解决 如何读取状态栏显示的文本内容

本帖最后由 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 11:02:22

本帖最后由 afan 于 2020-12-8 12:06 编辑

如果在测试中会匹配到其它字符,那就证明采的点唯一性特征不强,需要调整采点坐标
如果实在不会采点,如我3#所说,也可以用找图的方式,这个不需要多少判断,截个小图就行,不过码代码难度可能就大一点(不像 PixelGetColor 一个函数搞定),需要找一些截图和比对的udf学习下。这种可定点找图,效率也是极高的,检测这种小图在我老机器上也仅需2~3毫秒。


找10个色点的方式更快了,不到1毫秒


还可以用区域校验的方式去匹配,更快,0.3毫秒


这是使用工具进行的比对验证,还有很多技巧需要LZ自行研究,没有代码,没法建议。

afan 发表于 2020-12-7 15:11:10

itzyx 发表于 2020-12-7 13:50
好的 谢谢A大,我先用你给的工具 找色,分析状态的区别, 再用例子来应用,这个如果能应用好,感觉对以后 ...

工具获取的已是标准的十六进制RGB色值,PixelGetColor 获取的是十进制,可用 Hex(PixelGetColor(...) , 6) 统一

haijie1223 发表于 2020-12-2 18:11:10

itzyx 发表于 2020-12-2 17:47
发哥,还是非常感谢你的帮助, 但是我这边有权限 限制,软件没办法上传, 只能作罢了,不好意思了

小伙子,不讲武德,我大意啦哈没有闪!:face (31):

itzyx 发表于 2020-11-30 23:01:43

顺便再说一下我的想法,我想检测一个物品的工作状态(用对应软件连接检测的),之前用 _WinAPI_SendMessageTimeout 这个函数,没办法得到一个准确的反馈的情况,比如软件断开连接,切换状态等等,我现在想通过读取软件 状态栏的数据显示,判断测试物品的状态,比如,如图所示 0FPS,就表示测试的物品此刻有问题了

afan 发表于 2020-11-30 23:14:36

不是windows标准控件(msctls_statusbar32),不能用StatusbarGetText获取文本。
但如果状态栏字符信息如图示固定的话,可以用找图或检测坐标点色值的方式,也简单易行

itzyx 发表于 2020-11-30 23:22:43

afan 发表于 2020-11-30 23:14
不是windows标准控件(msctls_statusbar32),不能用StatusbarGetText获取文本。
但如果状态栏字符信息如图 ...

A大能帮忙举个例子嘛

afan 发表于 2020-11-30 23:54:31

itzyx 发表于 2020-11-30 23:22
A大能帮忙举个例子嘛

找图测色这类操作,各自的系统环境样本都可能不一样,因此不好简单举例。
简单说一下方法吧:
用相关工具截图(或采点)及相关坐标信息,样本图片(或采点坐标)应尽量小且图像像素具备唯一特征。
如有多个触发条件则采集多份。
用论坛大把的找图代码进行找图(采点方式可直接检测坐标点颜色)。

以下本人写的工具可助力
屏幕巡查
PixelCatcher

itzyx 发表于 2020-11-30 23:57:07

afan 发表于 2020-11-30 23:54
找图测色这类操作,各自的系统环境样本都可能不一样,因此不好简单举例。
简单说一下方法吧:
用相关工 ...

好嘞 谢谢A大我来试试 {:1_281:}

itzyx 发表于 2020-12-1 11:08:52

afan 发表于 2020-11-30 23:54
找图测色这类操作,各自的系统环境样本都可能不一样,因此不好简单举例。
简单说一下方法吧:
用相关工 ...

A大 我用你的工具 采集到了坐标点颜色,下面的话,该怎么进行呢,用函数巡捕查找,跟论坛搜索,都没有这类的介绍,实属有点找不到方向了, 还有系统环境样本不一样,是不是意思这类操作没办法换电脑测试了

afan 发表于 2020-12-1 12:25:47

本帖最后由 afan 于 2020-12-1 12:27 编辑

itzyx 发表于 2020-12-1 11:08
A大 我用你的工具 采集到了坐标点颜色,下面的话,该怎么进行呢,用函数巡捕查找,跟论坛搜索,都没有这 ...
如果你在这方面没有入门,那么跟你解释可能要花费一天,显然不可能,没这时间。
搜索 PixelGetColor 自己研究吧
换电脑当然可以,看你程序的设计了。

itzyx 发表于 2020-12-1 12:41:46

afan 发表于 2020-12-1 12:25
如果你在这方面没有入门,那么跟你解释可能要花费一天,显然不可能,没这时间。
搜索 PixelGetColor 自 ...

嗯 好的, 显然A大你说对了,这方面我是一窍不通, 我先自己研究研究, 感觉学会的话,挺有用的

afan 发表于 2020-12-1 15:58:17

itzyx 发表于 2020-12-1 12:41
嗯 好的, 显然A大你说对了,这方面我是一窍不通, 我先自己研究研究, 感觉学会的话,挺有用的

这个是终极方法,一般在无法简单获知数据时使用,在自动化操控方面可谓万能。
先从最简单的像素点获取>进行比对,达到目的入门,进一步接触分辨率、DPI、窗口前台后台、窗口分层结构等等,研究透了使用该方法也非常简单高效。

haijie1223 发表于 2020-12-1 17:19:10

想获取什么呢?

itzyx 发表于 2020-12-1 17:58:33

haijie1223 发表于 2020-12-1 17:19
想获取什么呢?

发哥,我想获取状态栏的数据,比如,如我上传图所示 的 0.00FPS,就表示我用软件测试的对应物品,此刻有问题了, 因为人不可能一直监测软件的测试状态,_WinAPI_SendMessageTimeout测试的是软件有无响应,但是对应测试物品,出现的硬件问题 就没办法通过函数获取了(我确实没找到) ,只能通过读取软件显示的状态, 来判断测试物品是否出现问题

haijie1223 发表于 2020-12-1 18:24:36

itzyx 发表于 2020-12-1 17:58
发哥,我想获取状态栏的数据,比如,如我上传图所示 的 0.00FPS,就表示我用软件测试的对应物品,此刻有 ...

#Include <GuiStatusBar.au3>
_GUICtrlStatusBar_GetText($hWnd, $iPart)
用这个命令试试

itzyx 发表于 2020-12-1 19:43:18

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基索引开始试的,结果是没读取出来.

haijie1223 发表于 2020-12-2 08:40:57

itzyx 发表于 2020-12-1 19:43
发哥,这个我试了也不行

这里的控件类名好长,不知道写的对不对,我从0基索引开始试的,结果是没读取 ...

你输出看下Hwnd获取到的对不对。
页: [1] 2 3 4
查看完整版本: 已解决 如何读取状态栏显示的文本内容