C# 区分鼠标设备和低级别鼠标挂钩

C# 区分鼠标设备和低级别鼠标挂钩,c#,setwindowshookex,C#,Setwindowshookex,我的电脑上有一个虚拟鼠标驱动程序和一个实际的鼠标 我正在使用LowLevelMouseProc捕获窗口范围内的事件,我希望不处理来自虚拟鼠标的事件 我无法使用RawInput,因为我需要处理另一个进程的消息 有没有办法知道是哪个设备发送了信息 如果可能的话,在真正的鼠标设备上强制使用dwExtraInfo可能会对我有所帮助 private IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) { MSLLHOOKSTRU

我的电脑上有一个虚拟鼠标驱动程序和一个实际的鼠标

我正在使用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);
}
private IntPtr HookCallback(intncode、IntPtr wParam、IntPtr lParam)
{
MSLLHOOKSTRUCT-hookStruct;
if(nCode<0)
{
返回CallNextHookEx(_hookId,nCode,wParam,lParam);
}
hookStruct=(MSLLHOOKSTRUCT)Marshal.PtrToStructure(lParam,typeof(MSLLHOOKSTRUCT));
//我想知道是哪只老鼠从这里发的信息。
返回CallNextHookEx(_hookId,nCode,wParam,lParam);
}

从.NET Windows API中没有任何内容可用于区分不同的鼠标。曾经有过一次,但它在Windows10之前就被删除了,所以它可能不再工作了

显示了如何做,但它使用了原始输入,顾名思义,我知道你说过你不想这样做。你对自己的限制让你陷入困境。这就像说“我闭着眼睛怎么看屏幕?”

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

有来自GameDev SE站点的错误消息