相关疑难解决方法(0)

使用setwindowshookex(user32.dll)禁用触摸屏鼠标设备事件

我有一个WPF C#应用程序.我有双屏幕,我想在其中一个屏幕上取消鼠标事件,因为它是一个触摸屏,当用户按下它时它会将焦点从主屏幕上移开.我想在向用户请求数据时启用触摸,然后阻止它.

我找到了一些关于使用user32.dll的应用程序挂钩的好例子,这有助于我捕获设备输入.一个例子显示在这里:http://www.pinvoke.net/default.aspx/user32.setwindowshookex.而另一个,更适合鼠标事件可以在这里显示:如何避免鼠标移动触摸

我的问题不是捕获设备输入,而是禁用它.上面的第一个示例显示了如何捕获键盘输入并提取按键,但不禁用它.

第二个例子不起作用.它捕获鼠标事件,常规USB鼠标设备和触摸屏设备.我可以告诉哪个是哪个,但我无法取消触摸屏设备.在该示例中,new IntPtr(1);为触摸设备返回a .这对设备输入没有任何作用.

另一方面,当我做相反的事情时,意味着返回新的IntPtr(1); 每次鼠标事件但触摸事件,似乎我的常规鼠标根本不移动(触摸设备鼠标确实移动).

这种方法可以帮助阻止常规鼠标,但不能阻止触摸鼠标,因为我没有返回的代码会阻止这个鼠标(我找到这个鼠标并返回代码,我检查了很多次,但代码什么也没做).

这是我的代码基于以上示例:

   static readonly LowLevelMouseProc hookCallback = HookCallback;
        static IntPtr hookId = IntPtr.Zero;

        public DisableTouchConversionToMouse()
        {
            hookId = SetHook(hookCallback);
        }

        static IntPtr SetHook(LowLevelMouseProc proc)
        {
            var moduleHandle = UnsafeNativeMethods.GetModuleHandle(null);

            var setHookResult = UnsafeNativeMethods.SetWindowsHookEx(HookType.WH_MOUSE_LL, 
proc, moduleHandle, 0);
            if (setHookResult == IntPtr.Zero)
            {
                throw new Win32Exception();
            }
            return setHookResult;
        }

        delegate IntPtr LowLevelMouseProc(int nCode, IntPtr wParam, IntPtr lParam);

        static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) …
Run Code Online (Sandbox Code Playgroud)

c# wpf hook mouseevent touch

6
推荐指数
1
解决办法
2304
查看次数

禁用鼠标提升

有没有办法从代码中禁用鼠标提升,即阻止窗口将触摸事件解释为鼠标事件?

我在 WPF 应用程序中捕获触摸事件,并且我不希望这些交互影响鼠标指针的可见性和位置。

有一个TouchFrameEventArgs.SuspendMousePromotionUntilTouchUp 方法似乎就是这样做的。不幸的是,它仅适用于 Silverlight 和 Windows Phone。

此外,还有一些系统设置可以用来禁用双击和右键单击提升,但没有什么可以禁用整个鼠标提升。

Windows 8 特定解决方案或低级解决方案也会有所帮助。

windows wpf mouse touch

5
推荐指数
1
解决办法
3011
查看次数

标签 统计

touch ×2

wpf ×2

c# ×1

hook ×1

mouse ×1

mouseevent ×1

windows ×1