我目前正在练习热键并编写一个小背景应用程序,可立即在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没有一些限制......提前谢谢!
答案 0 :(得分:0)
我无法直接帮助您,但我建议您阅读有关OLE / COM的信息。 https://msdn.microsoft.com/en-us/library/19z074ky.aspx
我知道您可以使用它从其他应用程序访问word,excel等。
答案 1 :(得分:0)
解决方案是确保在将CTRL + C输入发送到焦点应用程序之前解析并释放密钥,以避免热键重叠。否则,重点突出的应用程序将被发送一个混乱的HK,它不会理解或处理奇怪的事情。 它可以解释为什么Word插入日期或插入字符" i"或版权,而不是复制到剪贴板。
希望它有意义!