2015-06-03 5 views
1

Я пытался имитировать ключ от клавиатуры для прямых х игр с этим кодом:Симуляция клавиатуры с SendInput C#

public static void Send(short Keycode) 
{ 
    INPUT[] InputData = new INPUT[1]; 

    InputData[0].type = 1; 
    InputData[0].ki.wScan = Keycode; 
    InputData[0].ki.dwFlags = KEYEVENTF_KEYUP | KEYEVENTF_SCANCODE; 
    InputData[0].ki.time = 0; 
    InputData[0].ki.dwExtraInfo = IntPtr.Zero; 

    SendInput(1, InputData, Marshal.SizeOf(typeof(INPUT))); 
} 

Проблема заключается в том, это не имитирует ключ. Клавиша не нажимается.

+0

Да, я попробовал это, затем он имитирует ключ, но после этого ключ не освобождается. – Hanashi

+0

попытайтесь отправить оба события подряд. сначала вниз, затем вверх (с небольшой паузой между ними) – thumbmunkeys

+1

Спасибо, что это решение этой проблемы. – Hanashi

ответ

2

Чтобы получить правильную обработку ключевых событий, необходимо отправить сообщение KEYEVENTF_KEYDOWN, а затем KEYEVENTF_KEYUP.

Оставьте небольшую паузу между отправкой ключевых событий.

Это необходимо, если игра вызывает опрос ключей, после чего у нее есть время, чтобы распознать нажатую клавишу.