C++ MOUSEEVENTF_MOVE relative
C++ MOUSEEVENTF_MOVE relative
我正在尝试使用以下代码在屏幕上移动光标:
input.type = INPUT_MOUSE;
ZeroMemory(&input, sizeof(input));
input.mi.mouseData = 0;
input.mi.time = 0;
input.mi.dx = 20;
input.mi.dy = 20;
input.mi.dwExtraInfo = 0;
input.mi.dwFlags = MOUSEEVENTF_MOVE;
SendInput(1, &input, sizeof(input));
问题是,光标像这样移动(当前 pos | new pos [我用"GetCursorPos()"函数获得坐标]):
0 0 | 41 41
41 41 | 108 108
108 108 | 174 174
174 174 | 241 241
241 241 | 307 307
307 307 | 374 374
374 374 | 441 441
有人可以帮我吗?
系统可能会合并鼠标移动,因为您没有指定MOUSEEVENTF_MOVE_NOCOALESCE
。
更重要的是,您正在指定原始鼠标移动,系统可以对其进行调整,如文档中所述。
相对鼠标运动受鼠标速度和 双鼠标阈值。[...]如果指定的距离沿 X 轴或 Y 轴大于鼠标第一个阈值 值,并且鼠标速度不为零,则系统将 距离。如果沿 x 轴或 y 轴的指定距离为 大于第二个鼠标阈值,鼠标速度为 等于 2,系统将由此产生的距离加倍 应用第一个阈值测试。因此,系统是可能的 将指定的鼠标沿 x 轴或 y 轴的相对移动乘以 最多四次。
我最近遇到了同样的问题。我通过在Control Panel -> Mouse Properties -> Pointer Options -> Enhance pointer precision
中修改窗口鼠标属性来解决它,取消选中它。之后,所有 win32 API 鼠标事件就像一个魅力一样工作。
相关文章:
- 瓦尔格林德:数学函数"Conditional jump or move depends on uninitialised value(s)"
- Usages of std::move
- 在C++中对T*类型执行std::move的意外行为
- 关于std::move的使用,是否有编译警告
- 我应该实现右值推送功能吗?我应该使用std::move吗
- 通过实例理解std::move及其目的
- 使用仅使用一次的变量调用的复制构造函数.这可能是通过调用move构造函数进行编译器优化的情况吗
- 是否可以在 C++03 中定义'move-and-swap idiom'等效项
- 返回一个带有 std::move 的对象并链接函数
- '[](std::list& list)<int>{return std::move(list)}(list)' 是否保证将 'list' 留空?
- 为什么字符串的 move() 会改变内存中底层数据的位置?
- 当 std::move 与 C 样式数组或不移动对象时会发生什么
- 为什么当我为 for(auto& it : myUnorderedMap) {... = std::move(it.second)} 时,我会得到一个 const 引用?
- 添加自定义析构函数时,Move 构造函数在派生类中消失
- 将向量从 N1 缩小到 N2 项,而不触发默认构造函数并仅使用 move 语义
- CPP 中的瓦尔格林德和记忆泄漏:"Conditional jump or move depends on uninitialised values"
- std::move a const std::vector in a lambda capture
- "std::forward"和"std::move"真的不生成代码吗?
- std::vector move 而不是交换到空 vector 并释放存储
- 是否有必要使用 std::move?这不是已经是一个右值参考了吗?