使用SendKeys发送Windows密钥

时间:2012-04-28 18:03:10

标签: c# keyboard-shortcuts sendkeys

我正在研究C#中的快捷方式。我成功使用SendKeys实现了Ctrl,Alt和Shift。

喜欢这个;

Ctrl + C

System.Windows.Forms.SendKeys.SendWait("^c");

Alt + F4

System.Windows.Forms.SendKeys.SendWait("%{F4}");

但我无法使用SendKeys发送“Windows Key”。我试过ex: Win + E .SendWait("#e")但它没有用。我应该使用什么而不是“#”?

感谢。

4 个答案:

答案 0 :(得分:22)

确定你真正想要的是:http://inputsimulator.codeplex.com/

已经完成了将Win32 SendInput方法暴露给C#所做的所有艰苦工作。这允许您直接发送Windows密钥。这是经过测试和运作的:

InputSimulator.SimulateModifiedKeyStroke(VirtualKeyCode.LWIN, VirtualKeyCode.VK_E);

注意但是在某些情况下,您希望专门将密钥发送到应用程序(例如ALT+F4),在这种情况下使用Form库方法。在其他情况下,您希望将其一般发送到操作系统,使用上面的内容。


<强>旧

将此保留在此处以供参考,它不适用于所有操作系统,并且不会始终按您的需要运行。请注意,您正尝试将这些击键发送到应用程序,并且操作系统通常会提前拦截它们。对于Windows 7和Vista,太早(在E发送之前)。

SendWait("^({ESC}E)")Send("^({ESC}E)")

请注意:http://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.aspx

  

指定应保留SHIFT,CTRL和ALT的任意组合   当按下其他几个键时,请为这些键包含代码   括号中的键。例如,指定按住SHIFT的同时   按下E和C,使用“+(EC)”。指定按住SHIFT的同时   按下E,然后按C而不SHIFT,使用“+ EC”。

请注意,由于您希望同时按下ESC和(例如)E,因此您需要将它们括在括号中。

答案 1 :(得分:3)

Alt + F4仅在括号中起作用

SendKeys.SendWait("(%{F4})");

答案 2 :(得分:0)

nuget package下载InputSimulator。

然后写下:

        var simu = new InputSimulator();
        simu.Keyboard.ModifiedKeyStroke(VirtualKeyCode.LWIN, VirtualKeyCode.VK_E);

在我的情况下,要创建新的垂直桌面,需要三个键和类似的代码(Windows键+ Ctrl + D):

        simu.Keyboard.ModifiedKeyStroke(new[] { VirtualKeyCode.LWIN, VirtualKeyCode.CONTROL }, VirtualKeyCode.VK_D);

答案 3 :(得分:0)

SetForegroundWindow( /* window to gain focus */ );
SendKeys.SendWait("^{ESC}"); // ^{ESC} is code for ctrl + esc which mimics the windows key.