如何定时获取某个桌面软件界面显示的数据?

2021-12-15 16:44:25 +08:00
 elechi

各位大佬们,现在有个需求,windows 平台,运行的一个带 GUI 的软件(用 MFC 或者 QT 开发的 GUI 软件),界面上显示的一些数据,现在想定时获取这个软件界面的数据,有什么好的办法吗? 我能想到的办法: 1.定时截屏,获取数据,但是这要求这个 GUI 软件必须处于前台显示中,如果最小化后就无法获得了。 2.捕获内存,类似于金山游侠的原理,直接找到数据在内存中的位置。 各位大佬还有没有其他的好办法,谢谢了。

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

其他不晓得
ragnaroks
2021-12-16 08:31:12 +08:00
各种传奇开区助手,就是通过句柄取数据后台全自动操作具体的平台网关。

其中 WPF 这类可以通过 MainWindow.Content[0].Content[0].Button.Caption 这种方式写死路径查找
huruwo
2021-12-16 10:44:21 +08:00
抓包

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/822402

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX