我在winapi的原始输入中写了一些pices 它似乎工作,虽然我不确定它是多么可靠(不可靠) (如果它将在所有系统机器等上工作,这有点担心)
也出现了很多问题,一个是
我想以旧的方式使用我的第一个(我的意思是普通/基本鼠标), 它是processint WM_MOUSEMOVE等和移动箭头光标,只有 辅助鼠标我需要通过raw_input进行处理(主要可以保持原始输入不受影响),问题是
1)我如何确定rawinput检测到哪只鼠标是 次级?
2)如果禁用,第二个鼠标也会移动我的箭头 - 光标 它由RIDEV_NOLEGACY然后两个都没有移动光标(它使用沙漏),它也是错误的
想想也许我应该设置它有点不同我的setrup rawinput函数就像
void SetupRawInput()
{
static RAWINPUTDEVICE Rid[1];
Rid[0].usUsagePage = 0x01;
Rid[0].usUsage = 0x02;
Rid[0].dwFlags = 0; // Rid[0].dwFlags = RIDEV_NOLEGACY; /
Rid[0].hwndTarget = NULL;
int r = RegisterRawInputDevices( Rid, 1, sizeof(Rid[0]) );
if (!r) ERROR_EXIT("raw input register fail");
}
如何解决这个问题并使其有效? TNX
答案 0 :(得分:0)
我不知道我的方法是否是最好的方法,但这就是我对你问题的第一项所做的:
当我使用GetRawInputData(...)处理WM_INPUT时,我检查RAWINPUTHEADER结构传回的设备句柄(包含在函数返回的RAWINPUT结构中)是否与我想要使用的设备相同。如果不是,那么我只是不打算发回数据,如果是,我然后处理RAWINPUT结构中返回的RAWINPUTMOUSE数据。
如果您想知道如何获取设备列表,可以使用GetRawInputDeviceList(...),它将返回您尝试使用的鼠标的设备句柄。
正如我所说,这可能不是最好的方式,但我已经确认它确实适用于我的目的。我也为我的键盘原始输入数据执行此操作。
对于项目#2,它似乎可能影响两个鼠标,因为Windows具有对鼠标的独占访问权限,因此如果没有使用相同的标记注册它们,则无法注册一个特定的鼠标。但是知识比我更多的人可能会给出更好的解释。