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

DirectInput周期效果创建时设dwDuration为INFINITE 修改后无法停止问题

问题原因
  • 第一个核心问题是SetParameters调用的标志位缺少DIEP_DURATION:你只传了DIEP_DIRECTION | DIEP_TYPESPECIFICPARAMS | DIEP_START,DirectInput只会更新标志位指定的参数,你修改的本地dwDuration值不会同步到驱动层面,效果实际运行时长还是初始设置的INFINITE,自然不会自动停止。
  • 第二个潜在问题是参数索引不匹配:你修改的是jsInfo.periodic[p]的时长,但调用SetParameters时传的结构体是jsInfo.periodic[periodic].effect,如果p和periodic两个变量的值不一致,你传递的结构体根本不是你修改过时长的那一个,参数更新也不会生效。
解决思路
  • 修正SetParameters的标志位,追加DIEP_DURATION,明确告知API需要更新时长参数,同时保持参数索引一致,修改后的调用示例如下:
jsInfo.periodic[p].effect.dwDuration = duration * 1000;
// 追加DIEP_DURATION标志,索引统一使用p
HRESULT hr = jsInfo.periodic[p].pEffect->SetParameters(&jsInfo.periodic[p].effect, DIEP_DURATION | DIEP_DIRECTION | DIEP_TYPESPECIFICPARAMS | DIEP_START);
// 如果之前已经启动过无限时长的效果,建议先停止再重新启动,避免驱动状态残留
// jsInfo.periodic[p].pEffect->Stop();
jsInfo.periodic[p].pEffect->Start(1, 0);
  • 若需要排查问题,可以在调用SetParameters后调用GetParameters读取驱动侧实际存储的效果参数,确认dwDuration已经更新为目标值。
  • 部分老旧力反馈设备驱动对动态修改时长的兼容性较差,如果修正标志位后仍然无法生效,可以先释放原来的无限时长效果对象,用新的时长重新创建效果再启动,该方案兼容性最高。

内容的提问来源于stack exchange,提问作者ghiboz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:24:00