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

时间:2013-08-30 14:28:25

标签: c# c++ windows

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

它需要一些工作,但UI自动化解决方案几乎适用于所有其他应用程序。基于钩子和消息构建的hacky解决方案也将是很多工作,但它将非常脆弱。它仅适用于某些情况下的某些类型的应用程序。很多事情都可能出错。