区分多个鼠标的滚轮滚动消息

实现功能 :电脑插了两个或多个鼠标,程序中需要区分不同鼠标的滚轮滚动消息。
实现方式:直接上代码,复制粘贴可用,具体处理逻辑可以根据实际需求进行修改和扩展,请注意,这段代码是在Windows操作系统下使用C语言实现的。

c 复制代码
#include <Windows.h>
#include <iostream>
using namespace std;

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch (uMsg)
	{
	case WM_INPUT:
	{
		HRAWINPUT hRawInput = (HRAWINPUT)lParam;
		RAWINPUT rawInput;

		UINT dataSize = sizeof(rawInput);
		if (GetRawInputData(hRawInput, RID_INPUT, &rawInput, &dataSize, sizeof(RAWINPUTHEADER)) != -1)
		{
			if (rawInput.header.dwType == RIM_TYPEMOUSE)
			{
				if (rawInput.data.mouse.usButtonFlags == RI_MOUSE_WHEEL)
				{
					short delta = (short)rawInput.data.mouse.usButtonData;
					if (delta > 0) {
						// 鼠标向上滚动
						// 在这里处理向上滚动的逻辑
					}
					else {
						// 鼠标向下滚动
						// 在这里处理向下滚动的逻辑
					}
					//检查设备标识符或句柄以区分不同鼠标
					if (rawInput.header.hDevice == /* 鼠标1的设备标识符或句柄 */)
					{
						// 鼠标1的滚轮滚动事件
						// 执行相应的操作
						printf("Mouse 1 scrolled!\n");
					}
					else if (rawInput.header.hDevice == /* 鼠标2的设备标识符或句柄 */)
					{
						// 鼠标2的滚轮滚动事件
						// 执行相应的操作
						printf("Mouse 2 scrolled!\n");
					}
					else
					{
						// 其他鼠标的滚轮滚动事件
						// 执行相应的操作
						printf("Unknown mouse scrolled!\n");
					}
				}
			}
		}

		break;
	}

	default:
		return DefWindowProc(hwnd, uMsg, wParam, lParam);
	}

	return 0;
}

int main()
{
	// 创建窗口类并注册
	WNDCLASS wc = { 0 };
	wc.lpfnWndProc = WindowProc;
	wc.hInstance = GetModuleHandle(NULL);
	wc.lpszClassName = "MyWindowClass";
	RegisterClass(&wc);

	// 注册原始输入设备
	RAWINPUTDEVICE rawInputDevice;
	rawInputDevice.usUsagePage = 1;
	rawInputDevice.usUsage = 2;
	rawInputDevice.dwFlags = RIDEV_INPUTSINK;
	if (RegisterRawInputDevices(&rawInputDevice, 1, sizeof(RAWINPUTDEVICE)) == FALSE)
	{
		cout << "register err" << endl;
		return -1;
	}

	// 消息循环
	MSG msg;
	while (GetMessage(&msg, NULL, 0, 0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	cout << "end" << endl;
	return 0;
}

这段代码使用Raw Input API来捕获鼠标输入。在 WM_INPUT 消息处理中,它检查设备标识符以区分不同的鼠标。然后,它检查 usButtonFlags 字段来识别滚轮滚动消息,并从 usButtonData 字段中提取滚动增量。根据增量值的正负来分别处理每个鼠标的向上滚动和向下滚动逻辑。

相关推荐
计算机毕设孵化场5 小时前
计算机毕设-基于springboot的高校网上缴费综合务系统视频的设计与实现(附源码+lw+ppt+开题报告)
java·spring boot·计算机外设·音视频·课程设计·高校网上缴费综合务系统视频·计算机毕设ppt
码农小白1 天前
qt学习:linux监听键盘alt+b和鼠标移动事件
学习·计算机外设
计算机毕设孵化场1 天前
计算机毕设-基于springboot的多彩吉安红色旅游网站的设计与实现(附源码+lw+ppt+开题报告)
vue.js·spring boot·后端·计算机外设·课程设计·计算机毕设论文·多彩吉安红色旅游网站
kejijianwen2 天前
沸蛇鼠标,多功能智慧AI,重新定义生产力
人工智能·计算机外设
一秒美工助手2 天前
鼠标经过遮罩效果 详情页阿里巴巴国际站外贸跨境电商装修运营 详情页装修无线端装修手机装修设计代码证书滚动特效效果代码,自定义内容代码模板模块设计设置装修
前端·javascript·html·计算机外设
Dnelic-4 天前
查看台式机主机支持的最大分辨率 | 显卡和显示器
计算机外设·计算机显卡
yingge20174 天前
平价鼠标推荐-英菲克PW1有线鼠标
计算机外设
Leoysq4 天前
【UGUI】背包的交互01(道具信息跟随鼠标+道具信息面板显示)
计算机外设
葛狂的博客6 天前
【Qt实现虚拟键盘】
开发语言·qt·计算机外设
Cici_ovo7 天前
MicroPythonBLEHID使用说明——蓝牙鼠标
计算机外设