c++ - Windows C++ - Need Ideas - 在同一个应用程序/窗口中组合鼠标输入和原始输入

标签 c++ windows mouse raw-input

我会尽量保持简短。

我有一个应用程序,它可以通过单次鼠标输入运行多年。我希望为我的用户提供使用其他形式的输入的能力,例如交互式投影仪、触摸设备或几乎任何在您注册时提供 WM_INPUT 消息的东西。

我的一般想法是,我会为收到的每条消息 (WM_INPUT) 使用原始输入(提供 VID/PID、设备句柄和其他信息)处理这些供应商 ID 和/或产品 ID 的列表。未在原始输入代码中处理的任何设备都将在鼠标输入代码(WM_MOUSEMOVE、WM_LBUTTONDOWN、WM_RBUTTONDOWN 等)中处理。

理想情况下,我可以将所有鼠标输入代码保持原样或接近原样。这样,如果用户插入两个鼠标,或一个鼠标和一个不支持的指针设备(意味着我的原始输入代码不基于 VID/PID 处理它),这些设备将使用相同的系统光标。我的原始输入代码已知的任何设备都将被赋予单独的游标,这些游标仅存在于我的应用程序中。

问题很简单:Mouse Input 不提供有关消息来源的任何信息(例如 WM_MOUSEMOVE 等)。知道消息源自触摸会有所帮助(我已实现此功能),但绝对不够。我需要某种唯一标识符。如果我能知道鼠标输入的来源,我就只能处理来自不在我的已知设备列表中的设备的鼠标输入,并且我只能处理我的已知设备列表中的原始输入。

不幸的是,我似乎无法找到实现这一目标的方法。

有什么想法吗?

感谢您抽出宝贵的时间,抱歉发了这么长的帖子。

TL;DR - 你能确定 Windows 中鼠标输入(不是原始输入)的来源吗?确定来源是否是触摸是不够的信息,我需要某种唯一标识符。

鼠标输入 - http://msdn.microsoft.com/en-us/library/windows/desktop/ff468877(v=vs.85).aspx

原始输入 - http://msdn.microsoft.com/en-us/library/windows/desktop/ms645536(v=vs.85).aspx

最佳答案

我不知道有任何 API 可以事后获取某种设备 ID。

您可以使用 WM_INPUT 消息出现在所有其他输入消息之前这一事实,并且当您处理 WM_INPUT 时,您可以使用 GetRawInputDeviceInfo 和一个RIDI_DEVICENAME 返回的名称的哈希,用作唯一 ID。或者,您可以使用 RAWINPUTHEADER 结构的 hDevice 成员。

关于c++ - Windows C++ - Need Ideas - 在同一个应用程序/窗口中组合鼠标输入和原始输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21419226/

相关文章:

c++ - python 的 import as 的 C++ 等价物是什么?

c++ - 为 double * obj 和 obj * double 重载 * 运算符的问题

python - 鼠标左键触发 "long click"的命令

php - 如何使用 Codeception 将鼠标悬停在元素上?

matplotlib - 如何在 Google Colab 中使用 matplotlib 绘制交互式可绘制图像?

c++ - 可调用结果类型的推导

c++ - 如何重载cin来读取文件

windows - 在 Windows 命令提示符下转义尖括号

c++ - 确定 COM 是 In-Proc 还是 LocalServer

windows - NTFS 提供了哪些可靠性保证?