【问题标题】:How to send keys Control + A + B? (keep Control modifier "pressed")如何发送键 Control + A + B? (保持控制修饰符“按下”)
【发布时间】:2012-06-09 18:42:21
【问题描述】:

当我录制这个序列时它失败了。我知道我可以使用 Keyboard.SendKeys(control, "A",ModifierKeys.Control) 发送 Control + A,但是如何发送一个序列来保持控制并在按下下一个字母之前释放该字母。

注意:我正在寻找的序列类似于用于注释行 Control + K + C 的默认 Visual Studio 快捷方式

这可能是我只需要使用 WinApi 的东西吗?

【问题讨论】:

  • 技巧问题! 在这种特殊情况下,修饰符不需要保持按下状态 :) 在 VS 中尝试 Ctrl+K Ctrl+C。但是,我可以想象释放 Control 会触发事件/重置的情况,所以这仍然是一个有效的问题......
  • 显然 Visual Studio 接受任一版本。我想把控制键放在那里只是一种习惯。我需要得到 control_down a_down, a_up, b_down, control_up b_up

标签: c# winapi coded-ui-tests


【解决方案1】:

直接使用怎么样

Keyboard.SendKeys(control, "A",ModifierKeys.Control); 
Keyboard.SendKeys(control, "B",ModifierKeys.Control); 

?

【讨论】:

  • 我相信这在 VS 的情况下应该可以工作,但有些应用程序可能会重置“key up”的顺序....
  • 释放控制键时,我正在使用的应用程序循环。
【解决方案2】:

keybd_event 对此非常方便(比“替换”SendInput 更容易使用)。

keybd_event(Keys.Control, MapVirtualKey(Keys.Control, 0), 0, 0);
keybd_event(Keys.A, MapVirtualKey(Keys.A, 0), 0, 0);
keybd_event(Keys.A, MapVirtualKey(Keys.A, 0), KEYEVENTF_KEYUP, 0);
keybd_event(Keys.B, MapVirtualKey(Keys.B, 0), 0, 0);
keybd_event(Keys.B, MapVirtualKey(Keys.B, 0), KEYEVENTF_KEYUP, 0);
keybd_event(Keys.Control, MapVirtualKey(Keys.Control, 0), KEYEVENTF_KEYUP, 0);

如果您只需要按住 control、alt 和/或 shift,请查看TCS's answer of SendKeys.Send。 keybd_event 更强大,可以让你按住任意键,按任意顺序释放。

【讨论】:

  • 我会在 C++(我通常使用)中使用 keybd_event(),但在 C# 中,这意味着您需要 p/invoke,并且您没有您拥有的“VK_”#defines在 .h 文件中。在 C# 中的大多数情况下,我认为使用 SendKeys 更容易,但总而言之,keybd_event() 更加灵活......
  • @TCS:您可以使用System.Windows.Forms.Keys,因为the documentation 表示“包含键码的高位(与Windows 虚拟键码相同)”
【解决方案3】:

根据我对SendKeys.Send documentation 的理解,应该是:

SendKeys.Send("^(KC)")

可在备注中找到以下内容:

要指定在按下其他几个键的同时按住 SHIFT、CTRL 和 ALT 的任意组合,请将这些键的代码括在括号中。例如,要指定在按下 E 和 C 时按住 SHIFT,请使用“+(EC)”。要指定在按下 E 时按住 SHIFT,然后按 C 而没有 SHIFT,请使用“+EC”。

【讨论】:

【解决方案4】:

只需使用如下代码:

Keyboard.SendKeys("^AB"); 

【讨论】:

    【解决方案5】:

    这对我有用:

    Keyboard.SendKeys("^(AB)"); 
    

    【讨论】:

      猜你喜欢
      • 2023-03-18
      • 2012-03-30
      • 1970-01-01
      • 1970-01-01
      • 2013-02-13
      • 1970-01-01
      • 2017-05-25
      • 2017-10-31
      • 1970-01-01
      相关资源
      最近更新 更多