You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:27:11