Я посылаю ключи в игру. Это работает хорошо, но я использую thread.sleep блокирует поток, поэтому я не смог отправить ключи от фактического спама на клавиатуре во время выполнения кода:
Keyboard.SendKey(Keyboard.DirectXKeyStrokes.DIK_2,false,Keyboard.InputType.Keyboard);
Thread.Sleep(100);
Keyboard.SendKey(Keyboard.DirectXKeyStrokes.DIK_2, true, Keyboard.InputType.Keyboard);
Thread.Sleep(100);
...(repeat something like that 20-30x)
Класс клавиатуры происходит от эта ссылка ( он использует SendInput key down и key up events.)
Но если я запускаю это, он блокирует вводы аппаратной клавиатуры. Как запустить этот и другие нажатия клавиш asyn c или параллельно. Если я не использую thread.sleep, он не будет работать в игре, поэтому я должен его использовать. Но как я могу добиться этого, не блокируя поток sendinput?
EDIT-1: Это приложение WPF. Но это не имеет значения, WPF или приложение Windows Forms. Потому что я пытаюсь сделать макрос, и он запускается клавишей воспроизведения / паузы. Я также использую глобальный хук клавиатуры (низкий уровень), поэтому я ловлю клавиши play / pause.
EDIT-2: Если я не использую задержку между нажатием клавиши вверх и вверх, игра не распознает клавишу нажатие кнопки. Кроме того, нажатие клавиш имеет последовательность, а последовательность имеет разные задержки (key_2 100 мс, key_3 500 мс, key_a 200 мс и c).
РЕДАКТИРОВАТЬ-3: нажатия клавиш должны вводиться вместо сообщений. Потому что игра распознает> сообщения как текст и не запускает функции умений. Поэтому я использую SendInput вместо PostMessages.
Спасибо за совет!