В течение последних 3 часов или около того я пытался отправить ввод с клавиатуры, написав на клавиатуре. Я успешно нашел и открыл клавиатуру, но застрял на последнем шаге. Я точно не знаю, как отформатировать параметры DeviceIoControl, и я действительно не знаю, с чего начать получение значений.
В настоящее время у меня есть следующее, частично взятое из библиотеки Interception, опубликованной в другом ответе здесь. Я пропустил все, что открывает устройство, чтобы сэкономить место.
#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 не является правильным значением, но я не имею ни малейшего представления о том, как найти правильное значение, и никакие поиски не помогли мне продвинуться дальше.
DeviceIoControl()
? Потому что в противном случае вы могли бы просто использоватьSendInput()
(msdn .microsoft.com/en-us/library/ms646310%28v=vs.85%29.aspx) - person Benoit Blanchon   schedule 27.10.2013