37

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

像这样;

Ctrl+ C:

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

Alt+ F4

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

但我无法使用 SendKeys 发送“Windows 密钥”。我试过 ex: Win+ E:.SendWait("#e")但它不起作用。我应该使用什么来代替“#”?

谢谢。

4

4 回答 4

26

好的结果你真正想要的是: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 的任意组合,请将这些键的代码括在括号中。例如,要指定在按下 E 和 C 时按住 SHIFT,请使用“+(EC)”。要指定在按 E 时按住 SHIFT,然后按 C 而不按 SHIFT,请使用“+EC”。

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

于 2012-04-28T21:47:37.633 回答
5

Alt+F4 仅在括号中有效

SendKeys.SendWait("(%{F4})");
于 2017-09-20T09:06:25.560 回答
4

从nuget 包下载 InputSimulator 。

然后写这个:

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

在我的情况下,要创建新的垂直桌面,需要 3 个键和这样的代码(windows 键 + ctrl + D):

        simu.Keyboard.ModifiedKeyStroke(new[] { VirtualKeyCode.LWIN, VirtualKeyCode.CONTROL }, VirtualKeyCode.VK_D);
于 2019-05-08T11:43:42.267 回答
0
SetForegroundWindow( /* window to gain focus */ );
SendKeys.SendWait("^{ESC}"); // ^{ESC} is code for ctrl + esc which mimics the windows key.
于 2019-07-09T10:41:16.283 回答