递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 369|回复: 3
打印 上一主题 下一主题

[视窗] 如何获取鼠标键盘型号

[复制链接]

3

主题

43

帖子

750

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
750
跳转到指定楼层
楼主
发表于 2024-10-21 23:18:28 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
请问如何获取鼠标键盘型号一点思路都没有啊
有没有大哥指点一下
回复

使用道具 举报

133

主题

389

帖子

3421

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
3421
地板
发表于 2024-10-28 14:42:40 | 只看该作者
  1. #include <windows.h>
  2. #include <iostream>
  3. #include <string>
  4. #include <vector>

  5. // 结构体用于存储鼠标信息
  6. struct MouseInfo {
  7.     std::wstring name;
  8.     std::wstring deviceId;  // 可以看作类似序号的标识
  9. };

  10. // 比较函数用于排序鼠标设备列表
  11. bool CompareMouseInfo(const MouseInfo& m1, const MouseInfo& m2) {
  12.     return m1.deviceId < m2.deviceId;
  13. }

  14. // 从设备路径中提取设备名称
  15. std::wstring ExtractMouseName(const std::wstring& devicePath) {
  16.     size_t startIndex = devicePath.find_last_of(L'\\') + 1;
  17.     size_t endIndex = devicePath.find_last_of(L'#');
  18.     if (endIndex == std::wstring::npos) {
  19.         endIndex = devicePath.length();
  20.     }
  21.     return devicePath.substr(startIndex, endIndex - startIndex);
  22. }

  23. int main() {
  24.     // 存储鼠标信息的向量
  25.     std::vector<MouseInfo> mice;

  26.     // 获取系统中所有原始输入设备的数量
  27.     UINT numDevices;
  28.     GetRawInputDeviceList(NULL, &numDevices, sizeof(RAWINPUTDEVICELIST));
  29.     if (numDevices > 0) {
  30.         PRAWINPUTDEVICELIST deviceList = new RAWINPUTDEVICELIST[numDevices];
  31.         if (GetRawInputDeviceList(deviceList, &numDevices, sizeof(RAWINPUTDEVICELIST)) > 0) {
  32.             for (UINT i = 0; i < numDevices; i++) {
  33.                 if (deviceList[i].dwType == RIM_TYPEMOUSE) {
  34.                     UINT deviceNameSize;
  35.                     GetRawInputDeviceInfoW(deviceList[i].hDevice, RIDI_DEVICENAME, NULL, &deviceNameSize);
  36.                     WCHAR* deviceName = new WCHAR[deviceNameSize];
  37.                     if (GetRawInputDeviceInfoW(deviceList[i].hDevice, RIDI_DEVICENAME, deviceName, &deviceNameSize) > 0) {
  38.                         MouseInfo mouse;
  39.                         mouse.name = ExtractMouseName(deviceName);
  40.                         mouse.deviceId = deviceName;
  41.                         mice.push_back(mouse);
  42.                     }
  43.                     delete[] deviceName;
  44.                 }
  45.             }
  46.         }
  47.         delete[] deviceList;
  48.     }

  49.     // 对鼠标信息进行排序(可选,便于查看)
  50.     std::sort(mice.begin(), mice.end(), CompareMouseInfo);

  51.     // 输出鼠标信息
  52.     for (const auto& mouse : mice) {
  53.         std::wcout << "Mouse Name: " << mouse.name << std::endl;
  54.         std::wcout << "Mouse Device ID (similar to serial number): " << mouse.deviceId << std::endl;
  55.     }

  56.     return 0;
  57. }
复制代码

回复

使用道具 举报

133

主题

389

帖子

3421

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
3421
板凳
发表于 2024-10-28 14:39:15 | 只看该作者
你用这个代码试下
  1. #include <windows.h>
  2. #include <iostream>

  3. int main() {
  4.     // 获取系统中鼠标设备信息
  5.     RAWINPUTDEVICELIST list;
  6.     UINT numDevices = GetRawInputDeviceList(NULL, &numDevices, sizeof(RAWINPUTDEVICELIST));
  7.     if (numDevices > 0) {
  8.         PRAWINPUTDEVICELIST devices = new RAWINPUTDEVICELIST[numDevices];
  9.         if (GetRawInputDeviceList(devices, &numDevices, sizeof(RAWINPUTDEVICELIST)) > 0) {
  10.             for (UINT i = 0; i < numDevices; i++) {
  11.                 if (devices[i].dwType == RIM_TYPEMOUSE) {
  12.                     // 获取鼠标设备名称长度
  13.                     UINT size;
  14.                     GetRawInputDeviceInfoW(devices[i].hDevice, RIDI_DEVICENAME, NULL, &size);
  15.                     WCHAR* deviceName = new WCHAR[size];
  16.                     if (GetRawInputDeviceInfoW(devices[i].hDevice, RIDI_DEVICENAME, deviceName, &size) > 0) {
  17.                         std::wcout << "Mouse device name: " << deviceName << std::endl;
  18.                     }
  19.                     delete[] deviceName;
  20.                 }
  21.             }
  22.         }
  23.         delete[] devices;
  24.     }
  25.     return 0;
  26. }
复制代码
回复

使用道具 举报

27

主题

264

帖子

1994

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
1994
沙发
发表于 2024-10-28 14:14:56 | 只看该作者
这应该取不到吧,牌子这么多
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-11-22 02:33 , Processed in 0.082649 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表