通过DeviceIoControl发送键盘输入

时间:2013-10-27 08:30:12

标签: c++ windows keyboard deviceiocontrol

过去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);
}

如果在DeviceIoControl调用后调用GetLastError,则返回值为ERROR_INVALID_FUNCTION(1)。我认为这意味着IOCTL_WRITE不是正确的值,但我对如何找到正确的值没有最微妙的想法,并且没有任何搜索量让我更进一步。

0 个答案:

没有答案