这是一个C ++翻译程序。 当用户在没有按下CTRL-C的情况下select其他程序中的某些文本时,我想获得突出显示的文本,以便我可以翻译它。 C#解决scheme是受欢迎的,因为这个(文本获取)是一个相对独立的组件。
一个可能的解决scheme是将钩子添加到鼠标事件。 我检测到以下消息:用鼠标左键保持拖动,然后释放左键。 然后我发送CTRL-C到程序并从剪贴板中获取文本。
我保存并恢复剪贴板,所以大多数程序将与该方法很好地工作。 但是我观察到一些程序会在消息循环中处理像WM_KEYUP这样的事件。 对于这些节目,我发送假消息! 是否有另一种更安全的方式来获取突出显示的文本?
我试图find一些API调用来获取两个鼠标光标位置之间的文本,但我找不到一个。
编写与另一个程序GUI界面交互的Windows程序的正确方法是使用UI自动化 。 具体来说,您将编写一个UI自动化客户端 。
这需要一些工作,但UI Automation解决方案几乎可以与其他任何应用程序一起工作。 构建在钩子和消息之上的一个骇人听闻的解决方案也将是很多工作,但它将是非常脆弱的。 它只能在某些情况下适用于某些类型的应用程序。 很多事情可能会出错。