C#将CTRL + C键盘输入发送到Word

时间:2015-02-19 11:13:18

标签: c# keyboard ms-office sendkeys

我目前正在练习热键并编写一个小背景应用程序,可立即在ctrl + shift + alt + N热键上搜索所选文本。

一切都很好。我注册了全球HK,我通过WndProc()等拦截了消息。

什么行不通的方法是我尝试通过发送CTRL + C键盘输入来复制当前焦点窗口中的所选文本。

这是我目前的方法,简而言之:

IntPtr fWin = GetForegroundWindow();
SetForegroundWindow(fWin);

//InputSimulator.SimulateModifiedKeyStroke(VirtualKeyCode.CONTROL, VirtualKeyCode.VK_C);
SendKeys.SendWait("^(c)"); //I tried both ways, with the InputSimulator lib, and the standard SendKeys. None work.

Thread.Sleep(1000); //I wait a little bit for the clipboard to get the text.

Console.WriteLine(Clipboard.GetText()); //This is where I get disappointed...

Process.Start("firefox.exe", "-new-tab http://www.google.com/search?q=" + Clipboard.GetText().Replace(" ", "%20"));

此方法仅适用于某些应用程序(例如我们在办公室使用的方法:Trados Studio,这是一个非常复杂的文本管理软件)。但是,我无法使其与Word,Outlook或记事本等应用程序一起使用

信不信由你,我能够发送这样的信件:

string txt = "Y U NO WORK?";
SendWait(txt);
//OR
InputSimulator.SimulateTextEntry(txt);

但是当谈到CTRL + C时,没有任何反应

你们知道发生了什么吗?我希望这个MS没有一些限制......提前谢谢!

2 个答案:

答案 0 :(得分:0)

我无法直接帮助您,但我建议您阅读有关OLE / COM的信息。 https://msdn.microsoft.com/en-us/library/19z074ky.aspx

我知道您可以使用它从其他应用程序访问word,excel等。

答案 1 :(得分:0)

解决方案是确保在将CTRL + C输入发送到焦点应用程序之前解析并释放密钥,以避免热键重叠。否则,重点突出的应用程序将被发送一个混乱的HK,它不会理解或处理奇怪的事情。 它可以解释为什么Word插入日期或插入字符" i"或版权,而不是复制到剪贴板。

希望它有意义!