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

时间:2009-11-26 12:59:17

标签: c# text

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

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

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

3 个答案:

答案 0 :(得分:3)

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

[ 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秒钟选择窗口。

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

答案 1 :(得分:0)

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

使用Windows API。

答案 2 :(得分:0)

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

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

希望这对你的编码有所帮助并祝你好运, 最好的祝福, 汤姆。