【问题标题】:Code for copying the text from another window从另一个窗口复制文本的代码
【发布时间】:2020-06-18 16:08:34
【问题描述】:

是否可以编写一个从属于另一个应用程序的窗口中复制文本值的代码?

我有一个应用程序,每 5 分钟给我一次实时结果(仅限文本),我不能每 5 分钟复制粘贴一次。

【问题讨论】:

  • “有没有可能……”是的。
  • 不幸的是,没有。我希望代码从另一个应用程序提供的实时列表中复制文本。它需要每 10 分钟自动执行一次。

标签: c#


【解决方案1】:

也许

这取决于目标应用程序如何将其文本暴露给操作系统。

如果应用程序使用私有 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 桌面应用程序等),那就是另一个话题了。

【讨论】:

  • 非常感谢您抽出宝贵时间。所以我运行 spyxx.exe 并针对指定的窗口: 类名:HwndWrapper[TMain.exe;;e9b5e87f-3be2-4556-baa5-cc269616ef1f] 我对编码真的很陌生,所以请原谅我缺乏知识。那么下一步是什么?
  • @PeymanJavanbakht HwndWrapper 表示应用程序可能正在使用pywinauto 或 WPF。从您发布的屏幕截图来看,它可能使用 WPF,因此您可能可以使用 Snoop 从中获取文本。
  • @PeymanJavanbakht 假设它是一个 WPF 应用程序,那么您应该能够使用 Windows UI 自动化 API 以编程方式获取文本,因为 WPF 会自动将其 DOM 公开给 Windows:docs.microsoft.com/en-us/windows/win32/winauto/…
  • 哇,非常感谢,我真的很感激你。我现在会这样做,再次感谢
  • @PeymanJavanbakht 我希望我能像你戴墨镜一样酷
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 2022-07-05
  • 1970-01-01
  • 1970-01-01
  • 2018-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多