从其他应用程序问题捕获所选文本

时间:2009-02-04 23:28:57

标签: c# winapi

我在C#中编写了一小段代码来捕获其他应用程序中的选定文本:

SendKeys.SendWait("^c");
string searchedText = Convert.ToString(Clipboard.GetText());

如果我从Chrome浏览器中捕获文本,我的问题就是无效 任何人都知道为什么会发生这种情况或者是否有其他方法可以执行相同的任务

更新

我正在执行此应用程序以从任何其他应用程序捕获所选文本,并在用户按热键时将其保存在文件中。

protected override void WndProc(ref System.Windows.Forms.Message m)
    {
        // let the base class process the message
        base.WndProc(ref m);

        // if this is a WM_HOTKEY message, notify the parent object
        const int WM_HOTKEY = 0x312;
        if (m.Msg == WM_HOTKEY)
        {
                SendKeys.SendWait("^c");
                string searchedText = Convert.ToString(Clipboard.GetText());
                Save(searchedText);
                Clipboard.Clear();
        }
    }

1 个答案:

答案 0 :(得分:4)

嗯,你在这里假设Ctrl-C总是要在每个应用程序中将文本复制到剪贴板。这是一个很大的禁忌,你不知道什么会将文本复制到剪贴板。

另外,如果您没有专门尝试更改剪贴板的内容,应该说使用剪贴板是一个非常糟糕的主意。您似乎只是使用它来复制其他应用程序中的内容。

话虽如此,我建议您使用Microsoft UI自动化库。它的参考资料如下:

http://msdn.microsoft.com/en-us/library/ms747327.aspx

MSDN杂志上还有一篇关于这个主题的好文章:

http://msdn.microsoft.com/en-us/magazine/cc163288.aspx

具体而言,如果您希望获得所选文字,则需要查看位于以下位置的UI Automation TextPattern Overview

http://msdn.microsoft.com/en-us/library/ms745158.aspx