各位大佬们,现在有个需求,windows 平台,运行的一个带 GUI 的软件(用 MFC 或者 QT 开发的 GUI 软件),界面上显示的一些数据,现在想定时获取这个软件界面的数据,有什么好的办法吗? 我能想到的办法: 1.定时截屏,获取数据,但是这要求这个 GUI 软件必须处于前台显示中,如果最小化后就无法获得了。 2.捕获内存,类似于金山游侠的原理,直接找到数据在内存中的位置。 各位大佬还有没有其他的好办法,谢谢了。
1
strict 2021-12-15 16:55:52 +08:00
如果看不到源码的话, 只能采取第一种 RPA 的方式了. 业界也比较成熟了.
|
2
abear 2021-12-15 17:00:48 +08:00
cheatEngine
|
3
abear 2021-12-15 17:02:24 +08:00
wireshark
|
4
crab 2021-12-15 17:07:49 +08:00
WinAppDriver
|
5
orangie 2021-12-15 17:27:21 +08:00 2
参考 obs 和其他的录屏软件,其实第一种窗口不必须在最前,可以被其他窗口遮盖,因为 Windows 桌面从 vista 开始就是多层合成的。但应该还是不能最小化,因为似乎应用程序会根据是否最小化决定是否绘制窗口。不过话说,用 MFC 或者 Qt 开发的程序,应该用的是系统自带的控件展示数据,那么应该可以 hook 得到那个控件对象的句柄,然后从中取得数据,不过这些我没实践过,只是听说过。
|
7
elechi OP 除了分析屏幕和内存还有没有其他的方式?
|
8
siknet 2021-12-15 19:54:19 +08:00 via Android
按键精灵取后台程序数据
|
9
xtinput 2021-12-15 20:02:41 +08:00
开多桌面呀
|
10
abear 2021-12-15 23:18:11 +08:00
一切的数据都有来源,大多数来源是 http ,桌面截图是程序外,cheatEngine 是内存里面找,wireshark 从数据来源上面找
|
11
misdake 2021-12-16 00:06:04 +08:00
MFC 或者 Qt 的话,可以抓到控件句柄,直接读数据的吧
|
12
xupefei 2021-12-16 00:18:40 +08:00 via iPhone
最通用的方法是虚拟出一个假显示器,把窗口挪过去。
这样你就不用管程序最小化后还会不会更新窗口了。 |
13
ysc3839 2021-12-16 00:51:31 +08:00
可能可以通过无障碍相关的接口读到界面的文本数据。具体得看是什么 GUI 框架,请提供详细信息一边判断。
|
15
ysc3839 2021-12-16 00:56:10 +08:00
@orangie 其实 Windows XP 时就可以获取后台窗口的画面,因为加入了 PrintWindow 这个 API 。不过这个方法不是绝对有效,程序可以选择不返回图像。
|
16
ClericPy 2021-12-16 02:46:50 +08:00
挺多软件貌似可以按控件句柄提取 TEXT 什么的, 以前玩 autohotkey 的时候那个 winspy 还是 ahkinfo 什么的就挺简单的. 不过得看用什么框架写的 GUI, 有的窗口就拿不到控件信息
|
17
crazt 2021-12-16 03:45:32 +08:00
可以试试微软的 Power Automate Desktop ,个人账户虽然能用但没法设置定时启动,如果弄一个开发者订阅或是企业订阅就可以定时执行你要的操作。用 UI 自动化里的功能获取数据后邮件自动发送就行,也可以用它类似按键精灵的功能操控鼠标键盘完成你的需求(比如发送或是打开窗口)。
虽然我最近才发现这个软件,还没实际用过,但觉得楼主可以装一个试试 (¬‿¬) |
18
yousabuk 2021-12-16 07:47:20 +08:00 via iPhone
可以用 C 获取 window 句柄,控件句柄,再读取值。
其他不晓得 |
19
ragnaroks 2021-12-16 08:31:12 +08:00
各种传奇开区助手,就是通过句柄取数据后台全自动操作具体的平台网关。
其中 WPF 这类可以通过 MainWindow.Content[0].Content[0].Button.Caption 这种方式写死路径查找 |
20
huruwo 2021-12-16 10:44:21 +08:00
抓包
|
21
elechi OP 感谢各位大佬的意见,我去试试
|