Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何区分多个鼠标设备的mousemove输入?_C#_.net_Wpf_Pinvoke - Fatal编程技术网

C# 如何区分多个鼠标设备的mousemove输入?

C# 如何区分多个鼠标设备的mousemove输入?,c#,.net,wpf,pinvoke,C#,.net,Wpf,Pinvoke,我的笔记本电脑上有一个鼠标和一个触摸板。我想要一个mousemove的全局钩子,它不仅告诉我新的位置,还告诉我它来自哪里的物理设备。只将钩子订阅到touchpad将是一个更好的解决方案,因为我只对touchpad感兴趣。钩子必须在系统范围内工作(即使我的应用程序没有处于焦点) 我该怎么做 我不怕在我的C#/WPF应用程序中使用Pinvoke . 对于鼠标输入,您可以获得以下内容: [StructLayout(LayoutKind.Sequential)] internal struct RID

我的笔记本电脑上有一个鼠标和一个触摸板。我想要一个mousemove的全局钩子,它不仅告诉我新的位置,还告诉我它来自哪里的物理设备。只将钩子订阅到touchpad将是一个更好的解决方案,因为我只对touchpad感兴趣。钩子必须在系统范围内工作(即使我的应用程序没有处于焦点)

我该怎么做

我不怕在我的C#/WPF应用程序中使用Pinvoke . 对于鼠标输入,您可以获得以下内容:

[StructLayout(LayoutKind.Sequential)]
internal struct RID_DEVICE_INFO_MOUSE
{
    [MarshalAs(UnmanagedType.U4)]
    public int dwId;
    [MarshalAs(UnmanagedType.U4)]
    public int dwNumberOfButtons;
    [MarshalAs(UnmanagedType.U4)]
    public int dwSampleRate;
    [MarshalAs(UnmanagedType.U4)]
    public int fHasHorizontalWheel;
}
关于设备:

StructLayout(LayoutKind.Sequential)]
internal struct RID_DEVICE_INFO_HID
{
    [MarshalAs(UnmanagedType.U4)]
    public int dwVendorId;
    [MarshalAs(UnmanagedType.U4)]
    public int dwProductId;
    [MarshalAs(UnmanagedType.U4)]
    public int dwVersionNumber;
    [MarshalAs(UnmanagedType.U2)]
    public ushort usUsagePage;
    [MarshalAs(UnmanagedType.U2)]
    public ushort usUsage;
}