【问题标题】:C# P/Invoke keyboard_eventC# P/调用键盘事件
【发布时间】:2012-01-04 12:39:50
【问题描述】:

我一直在使用一些 P/Invoke 代码来模拟按键,但我不知道如何同时按下多个按键。我正在尝试模拟按住 CTRL,然后按 C,然后按 V,所以只需复制和粘贴。

目前我使用的代码是这样的,但到目前为止我只能设法按CTRL,而不是按住它并按C和V:

[DllImport("user32.dll", SetLastError = true)]
static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);

public const int VK_LCONTROL = 0xA2;

static void Main(string[] args)
{
   keybd_event(VK_LCONTROL, 0, 0, 0);
}

如果有任何建议,我将不胜感激。谢谢。

【问题讨论】:

  • 顺便说一句:最后一个参数是UIntPtr

标签: c# pinvoke keypress


【解决方案1】:

dwFlags 控制键是否被释放。

尝试以下方法:

keybd_event(VK_CONTROL, 0, 0, 0);// presses ctrl
keybd_event(0x43, 0, 0, 0); // presses c
keybd_event(0x43, 0, 2, 0); //releases c
keybd_event(VK_CONTROL, 0, 2, 0); //releases ctrl

【讨论】:

    【解决方案2】:

    keybd_event 应该为每次击键调用两次,一次是按下它,一次是释放它,第三个参数包括 KEYEVENTF_KEYUP 位。您当然应该在释放之前按下两个键。有关在 .NET Compact Framework 上使用 keybd_event 按“SHIFT+TAB”的工作示例,请参阅 here(可能略有不同)。

    请注意,keybd_event 已被 SendInput 取代,但仍应有效。

    【讨论】:

    • +1 SendInput 调用起来比较棘手。更容易坚持keybd_event
    猜你喜欢
    • 2022-01-22
    • 2017-05-29
    • 1970-01-01
    • 2020-12-13
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 1970-01-01
    • 2011-10-28
    相关资源
    最近更新 更多