Как использовать события SendInput key_down и key_up без блокировки потока? - PullRequest
0 голосов
/ 03 апреля 2020

Я посылаю ключи в игру. Это работает хорошо, но я использую 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.

Спасибо за совет!

...