Последние 3 часа или около того я пытался отправить ввод с клавиатуры посредством записи на устройство клавиатуры. Я успешно нашел и открыл клавиатуру устройства, но застрял на последнем этапе. Я не знаю точно, как отформатировать параметры DeviceIoControl, и я не знаю, с чего начать получать значения.
В настоящее время у меня есть следующее, частично взятое из библиотеки под названием «Перехват». Я оставил все устройства для открытия устройства, чтобы сэкономить место.
#define IOCTL_WRITE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x820, METHOD_BUFFERED, FILE_ANY_ACCESS)
if(device != INVALID_HANDLE_VALUE) {
DWORD dwReturned;
KEYBOARD_INPUT_DATA kbinput;
kbinput.UnitId = 0;
kbinput.MakeCode = 0x2D;
kbinput.Flags = KEY_MAKE;
kbinput.Reserved = 0;
kbinput.ExtraInformation = 0;
DeviceIoControl(device, IOCTL_WRITE, &kbinput, sizeof(KEYBOARD_INPUT_DATA), NULL, 0, &dwReturned, NULL);
kbinput.Flags = KEY_BREAK;
DeviceIoControl(device, IOCTL_WRITE, &kbinput, sizeof(KEYBOARD_INPUT_DATA), NULL, 0, &dwReturned, NULL);
}
Если я вызываю GetLastError после вызова DeviceIoControl, я получаю возвращаемое значение ERROR_INVALID_FUNCTION (1). Я предполагаю, что это означает, что IOCTL_WRITE не является правильным значением, но я не имею ни малейшего представления о том, как найти правильное значение, и никакие поиски не продвинули меня дальше.
Задача ещё не решена.
Других решений пока нет …