C#,在Windows上检测选定的文本?

我会制作像谷歌工具栏翻译function的工具,但它适用于桌面。 我想要做的是突出显示任何应用程序中的文本(word,pdf,live messenger等),并通过google translate api翻译,返回作为工具提示。

我搜索有关监控文本的msdn,我只发现使用复制和粘贴以及监控剪贴板来勾选事件。

那么,有什么想法吗? 谢谢。

一个起点是获得对当前前景窗口的引用。 下面的代码将获取当前选定的窗口和该窗口的标题:

[ DllImport("user32.dll") ] static extern int GetForegroundWindow(); [ DllImport("user32.dll") ] static extern int GetWindowText(int hWnd, StringBuilder text, int count); private void GetActiveWindow() { const int nChars = 256; int handle = 0; StringBuilder Buff = new StringBuilder(nChars); handle = GetForegroundWindow(); if ( GetWindowText(handle, Buff, nChars) > 0 ) { this.captionWindowLabel.Text = Buff.ToString(); this.IDWindowLabel.Text = handle.ToString(); } } 

您可以在计时器中运行此代码:即为用户提供10秒钟来选择窗口。

我不确定如何在窗口中检索选定的文本,但我会为您调查。

我认为你需要首先获取程序处于活动状态时激活的任何窗口的句柄。 我的猜测是你需要在这里查看InteropServices来做到这一点。

使用Windows API。

听起来你需要让你的代码拦截任何进程的任何窗口句柄,这是一个有点复杂的地方,因为你必须确保你有访问另一个进程的访问权限。

说到这一点,我认为这不是一个好主意,因为你可能会因为关于winapi调用陷阱文本选择事件的问题而最终崩溃另一个进程,而不是提到你必须确定进程是否选择了任何文本。 我能给出的最佳方向是……这里写了一篇关于如何在CodeProject上监视进程的文章,这可能是朝着正确方向迈出的一步,请记住所使用的代码是针对.NET 1.0框架的。

希望这有助于你的编码,祝你好运,祝你好运,汤姆。