【发布时间】:2020-06-18 16:08:34
【问题描述】:
【问题讨论】:
-
“有没有可能……”是的。
-
不幸的是,没有。我希望代码从另一个应用程序提供的实时列表中复制文本。它需要每 10 分钟自动执行一次。
标签: c#
【问题讨论】:
标签: c#
也许。
这取决于目标应用程序如何将其文本暴露给操作系统。
如果应用程序使用私有 2D/绘图库将文本自己渲染到内存或 VRAM 缓冲区,则不会。您需要截取屏幕截图并对其执行 OCR - 或者您可以将自己的代码注入目标进程并拦截那些 2D/绘图库调用以获取正在渲染的文本。
如果应用程序正在使用 Windows 提供的 GDI,那么有一些方法可以拦截这些调用以获取文本。我相信 Direct2D 和 DirectWrite 也提供了截取/分析其调用的直接方法。
如果应用程序使用 GUI 框架或平台,如 WinForms 或 WPF,则可以通过检查渲染视图的对象模型来提取数据和文本 - 这就是各种“间谍”实用程序的工作方式。 “Spy++”(spyxx.exe 包含在 Visual Studio 和 Windows SDK 中)可以检查本机 Win32 hWnd windows,而“Snoop”是检查 WPF 应用程序的非常强大的工具(Visual Studio 的内置 Visual Inspector 也可以做到这一点东西)。
此外,GUI 框架和平台通常会支持操作系统的内置辅助功能平台,并将屏幕上的数据显示为机器可读的结构化数据,供盲人和视障者的屏幕阅读器以及自动化软件使用. Windows 的内置平台称为Active Accessibility and Windows UI Automation。您可以下载一些预制工具来检查 Active Accessibility 数据。
如果是 HTML 应用程序(例如 Windows HTA、Electron 应用程序、Chrome 桌面应用程序等),那就是另一个话题了。
【讨论】:
HwndWrapper 表示应用程序可能正在使用pywinauto 或 WPF。从您发布的屏幕截图来看,它可能使用 WPF,因此您可能可以使用 Snoop 从中获取文本。