区分鼠标设备和低级鼠标钩子

3
我在计算机上有一个虚拟鼠标驱动程序和一个真实的鼠标。
我正在使用LowLevelMouseProc来捕获整个窗口系统的事件,但我希望处理来自虚拟鼠标的事件。
由于我需要处理另一个进程的消息,所以无法使用RawInput。
有没有办法知道哪个设备发送了消息?
如果可能,将dwExtraInfo强制应用于真实鼠标设备也可能会对我有所帮助。
private IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
    MSLLHOOKSTRUCT hookStruct;
    if (nCode < 0)
    {
        return CallNextHookEx(_hookId, nCode, wParam, lParam);
    }
 
    hookStruct = (MSLLHOOKSTRUCT) Marshal.PtrToStructure(lParam, typeof(MSLLHOOKSTRUCT));

    // I'd like to know from here which mouse has sent the message. 
    return CallNextHookEx(_hookId, nCode, wParam, lParam);
}
1个回答

1

没有任何来自.NET Windows API的内容可以区分不同的鼠标。曾经有一个Microsoft SDK for multiple inputs,但在Windows 10之前被删除,所以可能已经无法使用。

rawinput-sharp展示了如何做到这一点,但它使用原始输入,正如其名称所示,我知道你说你不想这样做。这个限制让你陷入了困境。这就像是说“我怎么闭着眼睛看屏幕?”

也许你可以通过某种方式将两个事件相关联,以获得你正在寻找的过滤器。或者,你可以过滤掉所有来自LowLevelMouseProc的事件,并将来自一个设备的原始输入传递到LowLevelMouseProc中。

GameDev SE网站上的相关讨论


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接