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框架的。
希望这有助于你的编码,祝你好运,祝你好运,汤姆。