我有一个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) 有没有办法从代码中禁用鼠标提升,即阻止窗口将触摸事件解释为鼠标事件?
我在 WPF 应用程序中捕获触摸事件,并且我不希望这些交互影响鼠标指针的可见性和位置。
有一个TouchFrameEventArgs.SuspendMousePromotionUntilTouchUp 方法似乎就是这样做的。不幸的是,它仅适用于 Silverlight 和 Windows Phone。
此外,还有一些系统设置可以用来禁用双击和右键单击提升,但没有什么可以禁用整个鼠标提升。
Windows 8 特定解决方案或低级解决方案也会有所帮助。