c ++ win32 Имитация нажатия клавиш с DirectInput - PullRequest
4 голосов
/ 06 сентября 2011

Как я могу имитировать нажатие клавиш с DirectInput? В настоящее время у меня есть инициализация (но я не уверен, хорошо это или нет):

#include <dinput.h>

#pragma comment (lib, "dinput8.lib")
#pragma comment (lib, "dxguid.lib")

LPDIRECTINPUT8 din;    // the pointer to our DirectInput interface
LPDIRECTINPUTDEVICE8 dinkeyboard;    // the pointer to the keyboard device
BYTE keystate[256];    // the storage for the key-information

void initDInput(HINSTANCE hInstance, HWND hWnd);    // sets up and initializes DirectInput
void detect_input(void);    // gets the current input state
void cleanDInput(void);    // closes DirectInput and releases memory 

Так может ли кто-нибудь показать мне, как имитировать, например, нажатие левой клавиши со стрелкой в ​​игре?

1 Ответ

6 голосов
/ 03 марта 2013

SendInput

SendInput позволяет имитировать нажатия клавиш. У вас есть выбор идентификации ключей, используя коды виртуальных клавиш или коды сканирования (см. KEYBDINPUT.dwFlags ). Очевидно, DirectInput игнорирует коды виртуальных ключей, но обрабатывает коды сканирования.

Короче говоря, используйте SendInput с кодами сканирования, и DirectInput ответит.

Перехват

Инструментарий Interception имитирует нажатие клавиш с помощью драйвера режима ядра и некоторых вспомогательных функций пользовательского режима.

Есть некоторые проблемы с безопасностью. Поскольку это драйвер режима ядра с закрытым исходным кодом, вам необходимо полностью доверять автору. Даже если автор полностью заслуживает доверия, драйвер позволяет отслеживать, а также создавать входные данные, что открывает большую дыру в безопасности: любое непривилегированное программное обеспечение может использовать его для прослушивания, например, паролей повышения. Он также может блокировать ввод с клавиатуры, включая CTRL + ALT + DEL.

Комментарии на странице github предполагают, что она пока не работает в Windows 8.

Используйте его на свой страх и риск.

...