Я пытаюсь сделать простой ключевой remapper - когда нажата одна клавиша клавиатуры, другое нажатие клавиши, сгенерированное кодом. Вот мой код:событие клавиатуры работает только один раз
[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);
}
Проблема, когда я нажимаю горячую клавишу назначен идентификатор 2, этот пресс-код возврата работает только один раз в 30 секунд, может быть. Что не так с этой функцией winapi keybd_evend? Я использовал это неправильно? Нет ничего плохого в других вещах (ids) в wndProc, неприятностях только с keybd_event.