在 Windows 中,如何使用 C++ 或 C# 在属于另一个进程的窗口中突出显示文本?

Posted

技术标签:

【中文标题】在 Windows 中,如何使用 C++ 或 C# 在属于另一个进程的窗口中突出显示文本?【英文标题】:In Windows how to get highlighted text in a window that belongs to another process using C++ or C#? 【发布时间】:2013-08-30 14:28:24 【问题描述】:

它在一个 C++ 翻译程序中。当用户在其他程序中选择一些文本而不按 CTRL-C 时,我想获取突出显示的文本以便我可以翻译它。 C# 解决方案很受欢迎,因为这个(文本获取)是一个相对独立的组件。

一种可能的解决方案是为鼠标事件添加挂钩。我检测到以下消息:鼠标拖动左键,然后释放左键。然后我将 CTRL-C 发送到程序并从剪贴板中获取文本。

我保存并恢复剪贴板,因此大多数程序都可以很好地使用该方法。但我观察到一些程序会在它们的消息循环中处理 WM_KEYUP 之类的事件。对于这些程序,我发送虚假消息!还有其他更安全的方法来获取突出显示的文本吗?

我试图找到一些 API 调用来获取两个鼠标光标位置之间的文本,但我找不到。

【问题讨论】:

您应该研究 UI 自动化 - 例如屏幕阅读器和其他辅助工具使用。具体取决于您使用的语言/库。 您需要添加一个语言标签,以便我们知道哪些类型的信息有用。你如何做到这一点将部分取决于你使用的语言、它已经拥有的功能以及使用它可以做什么。 (没有一个意味着你可以在 C++ 中找到答案,当你在 Python 中寻找答案时;回答 C++ 的人只是浪费了他们的时间和精力。)请edit 这样做;模糊的“windows”标签没有帮助。 【参考方案1】:

编写与其他程序 GUI 界面交互的 Windows 程序的正确方法是使用UI Automation。具体来说,你会写一个UI Automation Client。

这需要一些工作,但 UI 自动化解决方案几乎可以与所有其他应用程序一起使用。建立在钩子和消息上的 hacky 解决方案也需要大量工作,但它会非常脆弱。它仅适用于某些上下文中的某些类型的应用程序。很多事情都可能出错。

【讨论】:

谢谢。浏览内容后,似乎是我想要的。

以上是关于在 Windows 中,如何使用 C++ 或 C# 在属于另一个进程的窗口中突出显示文本?的主要内容,如果未能解决你的问题,请参考以下文章

从本机 C++ 调用 C#,而不使用 /clr 或 COM?

如何将 C++ windows dll 合并到 C# 应用程序 exe 中?

在 windows mobile 上使用 C# 和 C 或 C++ 之间的区别

如何使用 Windows 运行时使用 C# 实现 C++ API?

在 C++ 中使用 C# 接口或在 C# 中使用 C++ 接口

如何在 WPF C# GUI 中使用跨平台 C++