C/C++教程

windows API InjectTouchInput导致蓝屏

本文主要是介绍windows API InjectTouchInput导致蓝屏,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

硬件背景

客户硬件设备:windows触屏+触屏笔+鼠标
问题描述:收到外部客户的反馈,使用软件时会蓝屏。但是没有找到重现的步骤,不清楚是硬件还是软件导致的且这个问题遇到的客户越来越多。

软件需求

需求一:windows 全局触摸手势,使用指定手势时,软件需要进行一些不同的设置
需求二:如果有多屏的情况,如果在主屏触摸输入需要把触摸点偏移到副屏。抽象点来说就是,主屏的触摸输入点偏移到副屏的对应坐标。(场景:副屏打开一个windows 自带的画图工具,用手在主屏能操作副屏的画图软件)

线上触摸监听技术方案

使用RegisterPointerInputTarget对系统输入的点截取,然后进行判断手势和是否需要偏移左边的操作。然后使用InjectTouchInput模拟一个触摸到指定的坐标点。

问题排查和重现

经过一周多排查和问题重现,蓝屏的必现场景如下:
1:使用笔先操作一下屏幕(随便点下什么都就行)
2:启动触摸监听程序(这个程序的主要是RegisterPointerInputTarget截取输入的坐标点,然后在使用了InjectTouchInput模拟了一个触摸点。),然后在笔操作后一分钟内,使用手指在电脑的屏幕底部外侧,向上方快速反复滑动。必现蓝屏

* 这里注意:在笔操1分钟后就不会重现这个问题,不确定是不是windows  系统使用笔操作后1分钟内有什么操作,使用InjectTouchInput会导致蓝屏。如果有知道的朋友,给我普及下。

3:用windbg蓝屏日志工具分析了蓝屏日志,确定是模拟触摸出现了问题。

最新方案

需求一:对全局手势触摸,更换了新的技术方案,不使用RegisterPointerInputTarget和InjectTouchInput。其实想做一个全局手势触摸监听软件,无非就是想得到多点触摸的坐标值。新的技术方案,改用了GetRawInputDeviceInfo+HidP_GetScaledUsageValue来获取触摸设备输入的坐标点。

需求二:只能保持原有方案。未能解决。不过这个功能使用的人数不多,只能忍忍。

这篇关于windows API InjectTouchInput导致蓝屏的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!