我正在尝试制作简单的按键重新映射器 - 当按下一个键盘按键时,代码会生成另一个不同的按键。这是我的代码:
[DllImport("user32.dll")]
static extern uint keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);
public static void KeyDown(System.Windows.Forms.Keys key)
{
keybd_event((byte)key, 0, 0, 0);
}
public static void KeyUp(System.Windows.Forms.Keys key)
{
keybd_event((byte)key, 0, 0x7F, 0);
}
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x0312)
{
int id = m.WParam.ToInt32();
...
if (id==2) {
KeyDown(Keys.Return);
KeyUp(Keys.Return);
}
...
}
base.WndProc(ref m);
}
问题是,当我按下分配给 id 2 的热键时,此按下返回码每 30 秒只工作一次。这个 keybd_evend winapi 函数有什么问题?我用错了吗?wndProc 中的其他东西(id)没有问题,只有 keybd_event 有问题。