WPF 通过 GetMessageExtraInfo 方法获取当前收到的鼠标消息是否由触摸转换过来

这篇具有很好参考价值的文章主要介绍了WPF 通过 GetMessageExtraInfo 方法获取当前收到的鼠标消息是否由触摸转换过来。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文将告诉大家如何在 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 触摸相关文章来源地址https://www.toymoban.com/news/detail-857503.html

到了这里,关于WPF 通过 GetMessageExtraInfo 方法获取当前收到的鼠标消息是否由触摸转换过来的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包