原始输入处理(区分第二只鼠标)



我在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对鼠标有独占访问权,所以你不能注册一个特定的鼠标,而不注册它们所有的相同的标志。但是比我更有知识的人可能会给出更好的解释。

相关内容

  • 没有找到相关文章

最新更新