【问题标题】:How to press the Windows key programmatically using C# SendKeys如何使用 C# SendKeys 以编程方式按下 Windows 键
【发布时间】:2010-11-29 01:46:13
【问题描述】:

基本上我想在代码中模拟用户点击 windows 键。我知道有 SendKeys 如果我得到它们的句柄,它允许我将按键发送到 Windows,但我不知道我需要处理什么才能发送 Windows 键命令。例如。 Windows 键 + L。稍加阅读后,似乎 CTRL-ESC 也应该弹出“开始”菜单,但不确定如何告诉它将键发送到 Windows(如果这甚至可能的话)。任何帮助将不胜感激。

干杯!

【问题讨论】:

    标签: c# windows keypress sendkeys


    【解决方案1】:

    我认为您不能使用 SendKeys 来执行此操作,您需要 p/invoke 到 API 函数,可能是 keybd_event 发送 CTRL+ESC 或 Windows 键。

    Here 是在 VB 中以这种方式打开开始菜单的示例,here 是在 pinvoke.net 上带有 C# 签名的 keybd_event。

    【讨论】:

      【解决方案2】:

      用户可以通过 WinKey 快捷方式执行的某些操作可以通过其他方式以编程方式完成。以 WinKey+L 为例,您可以改用以下语句:

      Process.Start("rundll32.exe", "user32.dll,LockWorkStation");
      

      如果您可以详细说明您想要完成的工作,也许有比 keybd_event 更好的方法(正如 Dale 所建议的那样)。

      【讨论】:

      • 在您上面的陈述中,例如,如果您在三台电脑的网络中,是否可以锁定特定用户?
      【解决方案3】:

      我使用了user703016 提供的here 的类并且工作正常!

      参考:

      using System.Runtime.InteropServices;
      using System.Windows.Forms;
      
      static class KeyboardSend
      {
          [DllImport("user32.dll")]
          private static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);
      
          private const int KEYEVENTF_EXTENDEDKEY = 1;
          private const int KEYEVENTF_KEYUP = 2;
      
          public static void KeyDown(Keys vKey)
          {
              keybd_event((byte)vKey, 0, KEYEVENTF_EXTENDEDKEY, 0);
          }
      
          public static void KeyUp(Keys vKey)
          {
              keybd_event((byte)vKey, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
          }
      }
      

      以这种方式使用:

      KeyboardSend.KeyDown(Keys.LWin);
      KeyboardSend.KeyDown(Keys.D4);
      KeyboardSend.KeyUp(Keys.LWin);
      KeyboardSend.KeyUp(Keys.D4);
      

      【讨论】:

        【解决方案4】:

        您需要使用全局键盘挂钩来挂钩应用程序外部的键盘。有一篇关于如何做到这一点的文章here

        【讨论】:

        • 不正确。仅当您想收听击键时才这样做,而不是在您想发送击键时。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-20
        • 1970-01-01
        • 1970-01-01
        • 2013-08-08
        相关资源
        最近更新 更多