我在winapi的原始输入中编写了一些片段它似乎在起作用,尽管我不确定它有多可靠(不可靠)(如果它将在所有系统机器等上工作,这有点担心)
也出现了许多问题,其中一个是
我想用我的第一个(我的意思是正常/基础鼠标)在旧的方式,它是处理WM_MOUSEMOVE等和移动箭头光标,只有次要鼠标我需要raw_input处理(次要鼠标可以不受rawinput的影响),问题是
1)我如何确定由rawinput检测到的鼠标是二次吗?
2)第二个鼠标也移动我的箭头光标,如果我禁用如果是RIDEV_NOLEGACY,那么两者都没有移动光标(它变成了沙漏),这也是错误的
我想也许我应该稍微改变一下设置我的设置函数就像
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
我不知道我的方法是不是最好的,但这是我对你问题中的第一个项目的处理方法:
当我使用GetRawInputData(…)处理WM_INPUT时,我检查一下RAWINPUTHEADER结构(包含在从函数返回的RAWINPUT结构中)传递回的设备句柄是否与我想要使用的设备相同。如果不是,那么我就不发送回数据了,如果是,那么我就处理RAWINPUT结构体中返回的RAWINPUTMOUSE数据。
如果你想知道如何获得设备列表,你可以使用GetRawInputDeviceList(…),它将返回你正在尝试使用的鼠标的设备句柄。
正如我所说的,这可能不是最好的方法,但我已经确认它确实适合我的目的。我对键盘的原始输入数据也这样做。
关于第2项,它可能会影响两个鼠标,因为Windows对鼠标有独占访问权,所以你不能注册一个特定的鼠标,而不注册它们所有的相同的标志。但是比我更有知识的人可能会给出更好的解释。