【问题标题】:Sending Windows key using SendKeys使用 SendKeys 发送 Windows 密钥
【发布时间】:2019-07-09 18:41:16
【问题描述】:

我正在研究 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") 但它不起作用。我应该使用什么来代替“#”?

谢谢。

【问题讨论】:

  • Windows 键实际上相当于CTRL + ESC,你试过了吗?
  • 第二。它是 SendSystemKeys "{Ctrl+Esc}"
  • 是的,我用 .SendWait("^{ESC}") 试过了,但这也不起作用。这个语法有错误的代码吗?
  • Process.Start("explorer.exe");
  • Win + E ,只是一个示例。想象一下,我需要 Win + R(运行)或 Win + L。

标签: c# keyboard-shortcuts sendkeys


【解决方案1】:

好吧,你真正想要的是: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,因此您需要将它们括在括号中。

【讨论】:

  • 酷,您的 gravatar 几乎与 OP 相同。 :-P
  • 这就是我真正想要的。非常感谢您的回复,非常感谢!
  • 输入模拟器需要你引用excel中的dll对吗?
  • 如何发送特定窗口的密钥?例如,我想将 Winkey 发送到全屏且处于活动状态的应用程序。它没有按我需要的方式工作。谢谢!
【解决方案2】:

从nuget package下载 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);

【讨论】:

  • 知道如何通过 Add-Type 在 PowerShell 中使用它吗?
  • 请看这个页面:github.com/TChatzigiannakis/InputSimulatorPlus/blob/master/…你可以运行运行命令,然后在运行中输入任何应用名称,然后做你想做的每一件事。
  • 例如:var sim = new InputSimulator(); sim.Keyboard .ModifiedKeyStroke(VirtualKeyCode.LWIN, VirtualKeyCode.VK_R) .Sleep(1000) .TextEntry("记事本") .Sleep(1000) .KeyPress(VirtualKeyCode.RETURN) .Sleep(1000) .TextEntry("这些.. .") .TextEntry("5 秒后。") .Sleep(5000) .ModifiedKeyStroke(VirtualKeyCode.MENU, VirtualKeyCode.SPACE) .KeyPress(VirtualKeyCode.DOWN) .KeyPress(VirtualKeyCode.RETURN);
【解决方案3】:

Alt+F4 只在括号中起作用

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

【讨论】:

    【解决方案4】:
    SetForegroundWindow( /* window to gain focus */ );
    SendKeys.SendWait("^{ESC}"); // ^{ESC} is code for ctrl + esc which mimics the windows key.
    

    【讨论】:

      猜你喜欢
      • 2013-09-30
      • 1970-01-01
      • 1970-01-01
      • 2012-10-22
      • 2014-10-21
      • 1970-01-01
      • 2011-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多