原始输入处理(区分辅助鼠标)

时间:2014-03-24 09:34:29

标签: winapi input mouse raw-input

我在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

1 个答案:

答案 0 :(得分:0)

我不知道我的方法是否是最好的方法,但这就是我对你问题的第一项所做的:

当我使用GetRawInputData(...)处理WM_INPUT时,我检查RAWINPUTHEADER结构传回的设备句柄(包含在函数返回的RAWINPUT结构中)是否与我想要使用的设备相同。如果不是,那么我只是不打算发回数据,如果是,我然后处理RAWINPUT结构中返回的RAWINPUTMOUSE数据。

如果您想知道如何获取设备列表,可以使用GetRawInputDeviceList(...),它将返回您尝试使用的鼠标的设备句柄。

正如我所说,这可能不是最好的方式,但我已经确认它确实适用于我的目的。我也为我的键盘原始输入数据执行此操作。

对于项目#2,它似乎可能影响两个鼠标,因为Windows具有对鼠标的独占访问权限,因此如果没有使用相同的标记注册它们,则无法注册一个特定的鼠标。但是知识比我更多的人可能会给出更好的解释。