C# C向Word发送CTRL+C键盘输入

C# C向Word发送CTRL+C键盘输入,c#,keyboard,ms-office,sendkeys,C#,Keyboard,Ms Office,Sendkeys,我目前正在练习热键,并编写了一个小的后台应用程序,可以在ctrl+shift+alt+N热键上即时搜索选定的文本 一切都很好。我注册全球香港,我通过WndProc等截获信息 不起作用的是,我试图通过发送CTRL+C键盘输入来复制当前聚焦窗口中的选定文本 简而言之,这是我目前的方法: IntPtr fWin = GetForegroundWindow(); SetForegroundWindow(fWin); //InputSimulator.SimulateModifiedKeyStroke(

我目前正在练习热键,并编写了一个小的后台应用程序,可以在ctrl+shift+alt+N热键上即时搜索选定的文本

一切都很好。我注册全球香港,我通过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"));
此方法仅适用于某些应用程序,如我们在office中使用的应用程序:Trados Studio,它是一个相当复杂的文本管理软件。但是,我无法使它与Word、Outlook或记事本等应用程序一起工作

信不信由你,我可以这样给他们写信:

string txt = "Y U NO WORK?";
SendWait(txt);
//OR
InputSimulator.SimulateTextEntry(txt);
但是,当使用CTRL+C时,什么也不会发生


你们知道发生了什么事吗?我希望这一次没有微软的限制。。。提前谢谢

我无法直接帮助您,但我建议您阅读有关OLE/COM的内容。


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

解决方案是确保在将CTRL+C输入发送到重点应用程序之前解决并释放这些键,以避免热键重叠。否则,聚焦应用程序将发送一个混乱的HK,它无法理解或处理。 这将解释为什么Word插入日期或插入字符i或版权,而不是复制到剪贴板


希望它有意义

谢谢你的帮助。我找到了解决办法。这是关于时间的问题。我的应用程序的热键与目标应用程序的CTRL+C命令重叠。所以事实上,Word、记事本等正在处理一个他们不理解的热键。我添加了一些代码来检查我的用户在运行复制过程之前是否释放了热键。Alex,我建议改为自动化Office应用程序。您选择的方式不稳定且不可靠。您可以获取正在运行的应用程序的实例,然后获取所需的信息。请参阅以了解更多信息。嗨,Eugene,是的,它肯定会工作,但我们使用的不仅仅是Office应用程序。我基本上需要在任何允许通过CTRL+C复制的应用程序中检索任何选定的文本。我们使用当前版本已经一周了,还没有人抱怨;出于好奇,如果要发送剪贴板复制方法的热键事件,为什么不简单地监视剪贴板,让用户按ctrl-c键呢?因为我不想每次剪贴板文本内容更改时都触发搜索。我需要它只发生在用户按下我定义的热键时。