首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DeviceIoControl帮助

DeviceIoControl帮助
EN

Stack Overflow用户
提问于 2020-12-18 08:40:07
回答 1查看 118关注 0票数 0

使用C++,尝试使用DeviceIOControl直接通过驱动发送鼠标点击。关于这一点的文档似乎很少。非常烦人。到目前为止,这就是我所想出来的。不知道dwIoControlNode之后的任何参数中都包含了什么。我见过键盘示例,但没有鼠标示例。

编辑:感谢你的帮助,Remy,明天我会尝试你的建议,我已经工作了一整天,我正在思考。

代码语言:javascript
复制
int i = 0;
GUID MouseyBoi;
HANDLE HIDD = NULL;
HIDD_ATTRIBUTES DeviceAttributes;
ULONG Needed, l;
HDEVINFO DeviceInfoSet;
SP_DEVICE_INTERFACE_DATA DevData;
PSP_INTERFACE_DEVICE_DETAIL_DATA DevDetail;
PSP_DEVICE_INTERFACE_DATA InfData;

DeviceInfoSet = SetupDiGetClassDevs(&GUID_DEVCLASS_MOUSE, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
SetupDiGetDeviceInterfaceDetail(DeviceInfoSet, &DevData, NULL, 0, &Needed, 0);
DevDetail = (SP_DEVICE_INTERFACE_DETAIL_DATA*)GlobalAlloc(GPTR, 1 + 4);
DevDetail->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);

HIDD = CreateFile(DevDetail->DevicePath, GENERIC_WRITE, NULL, NULL, OPEN_EXISTING, 0, NULL);
HidD_GetAttributes(HIDD, &DeviceAttributes);
std::cout << DeviceAttributes.VersionNumber << std::endl;
std::cout << DeviceAttributes.ProductID;
EN

回答 1

Stack Overflow用户

发布于 2020-12-18 10:03:03

首先,您需要转义字符串中的\字符,例如:

LPCWSTR FileName = L"USB\\VID_046D&PID_C07E&MI_00\\6&361cde46&0&0000";

其次,这不是您无论如何都可以用CreateFile()打开的有效文件/设备路径。它应该看起来更像这样:

LPCWSTR FileName = L"\\\\?\\USB#VID_046D&PID_C07E&MI_00#6&361cde46&0&0000#{<guid>}";

您可以使用SetupDiGetDeviceInterfaceDetail()获取CreateFile()可以接受的设备路径。

也就是说,一旦您设法打开了一个指向USB设备的句柄,DeviceIoControl()调用应该如下所示,因为您只是插入输入数据,而不是返回任何输出(但我可能错了,因为我找不到任何关于IOCTL_MOUSE_INSERT_DATA的文档):

代码语言:javascript
复制
MOUSE_INPUT_DATA MouseInput = {};
MouseInput.UnitId = 0;
MouseInput.ButtonFlags = MOUSE_LEFT_BUTTON_DOWN;
// set other fields as needed ...

DeviceIoControl(hFile, IOCTL_MOUSE_INSERT_DATA, &MouseInput, sizeof(MOUSE_INPUT_DATA), NULL, 0, NULL, NULL);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65350308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档