Win32下使用InjectTouchInput()模拟笔输入失效问题求助
Win32笔输入注入参数错误(错误码87)的排查思路
我之前在做Win32触摸注入模拟笔输入时也踩过几乎一模一样的坑,错误码87(参数错误)大多是因为参数不匹配或者笔专属配置没到位,给你几个具体的排查方向:
先纠正输入类型的核心错误
你当前用的是PointerInputType.Touch,但触摸类型本身不支持压力、方向这些笔的专属参数——系统不仅会直接忽略这些字段,甚至可能因为传入了Touch不识别的参数触发错误87。赶紧把输入类型改成PointerInputType.Pen,这是最容易忽略的关键点。检查
POINTER_PEN_INFO结构体的配置完整性
这个结构体的参数有不少细节要抠:- 必须在
penFlags里启用对应的功能标志,比如要让压力生效,就得加上POINTER_PEN_FLAG_PRESSURE;要启用方向倾斜,就得加POINTER_PEN_FLAG_TILT_X和POINTER_PEN_FLAG_TILT_Y。没开这些标志,系统根本不会处理对应的参数。 - 注意参数的合法范围:压力值是0-1024,倾斜X/Y是-900到900,超出范围会直接触发参数错误。
- 确保
pointerInfo.pointerType设置为PT_PEN,和你指定的输入类型完全一致,类型不匹配也是常见的报错原因。
- 必须在
验证触摸注入初始化参数
调用InitializeTouchInjection时:dwMaxCount要设置为你需要注入的最大笔触点数量,不能小于你实际要注入的触点数。dwMode建议用TOUCH_FEEDBACK_DEFAULT,避免使用不兼容笔输入的反馈模式。
用极简示例逐步调试
先写一个最小可行的笔注入代码:只处理按下事件,设置压力为512,倾斜值为0,其他参数保持默认,看能否正常运行。如果没问题,再逐步添加方向、其他标志等参数,这样能快速定位是哪个参数导致的错误。打印结构体参数排查细节
把你构造的POINTER_INPUT_TYPE和POINTER_PEN_INFO里的每个字段都输出出来,对照官方文档逐一核对:比如结构体的字节对齐是否正确(尤其是跨语言调用时)、枚举值是否用错、数值类型是否匹配(比如把DWORD写成了INT)。
内容的提问来源于stack exchange,提问作者jacobian
相关产品推荐
相关产品推荐

