Closed Blinue closed 8 months ago
在调试过程中,我发现 SetCursorPos 无法可靠移动光标,虽然调用之后立刻查询光标位置没有问题,但经过一段时间后再次查询会发现光标位置又回到了设置之前。我怀疑这是因为 OS 异步处理硬件输入队列,SetCursorPos 时队列中仍有旧事件尚未处理。
现在使用 SendInput 将移动光标的事件插入输入队列,然后等待系统处理到该事件,避免了并发问题。如果设置不成功则多次尝试。这里旨在尽最大努力,因为这是 OS 的 bug,我怀疑是否有完美的解决方案。
经过测试,新方案似乎解决了问题,我没有再遇到光标跳跃的问题。
在调试过程中,我发现 SetCursorPos 无法可靠移动光标,虽然调用之后立刻查询光标位置没有问题,但经过一段时间后再次查询会发现光标位置又回到了设置之前。我怀疑这是因为 OS 异步处理硬件输入队列,SetCursorPos 时队列中仍有旧事件尚未处理。
现在使用 SendInput 将移动光标的事件插入输入队列,然后等待系统处理到该事件,避免了并发问题。如果设置不成功则多次尝试。这里旨在尽最大努力,因为这是 OS 的 bug,我怀疑是否有完美的解决方案。
经过测试,新方案似乎解决了问题,我没有再遇到光标跳跃的问题。