马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本文将告诉大家如安在 WPF 大概其他 Win32 应用里面,在收到鼠标消息时,通过 GetMessageExtraInfo 方法获取当前收到的鼠标消息是否由触摸消息提拔而来
大家都知道,在不开启 WM_Pointer 的情况下,无论是走 WM_Touch 大概是 RealTimeStylus 等方式,默认下触摸都会提拔为鼠标消息从而更好兼容应用程序的逻辑
如果此时应用程序想要根据消息循环里面接收到的 Win32 消息判断一个鼠标消息的来源是否来自于触摸框触摸屏大概是 Pen 笔等,可以通过 GetMessageExtraInfo 方法获取更多的信息
根据 GetMessageExtraInfo 方法获取到的 LPARAM 进行 Mask 一下 0xFFFFFF80 值,即可通过返回的结果判断鼠标消息的来源,如返回的结果是 0xFF515780 则判断是 Touch 触摸消息过来的,通过返回结果是 0xFF515700 则判断是 Pen 笔过来的
演示的代码如下- private IntPtr Hook(IntPtr hwnd, int msg, IntPtr wparam, IntPtr lparam, ref bool handled)
- {
- const int WM_LBUTTONDOWN = 0x0201;
- if (msg == WM_LBUTTONDOWN)
- {
- var messageExtraInfo = PInvoke.GetMessageExtraInfo();
- var value = messageExtraInfo.Value.ToInt64();
- var mask = 0xFFFFFF80; // MOUSEEVENTF_FROMTOUCH
- var result = value & mask;
- if (result == 0xFF515780)
- {
- // 这是 Touch 过来
- }
- else if (result == 0xFF515700)
- {
- // 收到 Pen 的
- }
- else if (value == 0)
- {
- // 这是鼠标
- }
- }
- return IntPtr.Zero;
- }
复制代码 通过以上代码即可相识当前收到的鼠标消息是否从触摸或笔消息提拔的,还是由真正的鼠标创建
特殊感谢 許煜坤-台灣微軟研究開發處 的大佬提供了这个方法
本文以上的可调试代码放在github 和 gitee 接待访问
可以通过如下方式获取本文的源代码,先创建一个空文件夹,接着利用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码- git init
- git remote add origin https://gitee.com/lindexi/lindexi_gd.git
- git pull origin 3c2d3fc41f0bca74e1c15be5d732138e0b958497
复制代码 以上利用的是 gitee 的源,如果 gitee 不能访问,请替换为 github 的源。请在命令行继续输入以下代码- git remote remove origin
- git remote add origin https://github.com/lindexi/lindexi_gd.git
- git pull origin 3c2d3fc41f0bca74e1c15be5d732138e0b958497
复制代码 获代替码之后,进入 WegairhokawhelnaHibairdercawwe 文件夹
更多请参阅 应用程序疑难明答 - Win32 apps - Microsoft Learn
更多触摸和笔迹誊写相关请看 WPF 触摸相关
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |