如何在C 屏幕上的任何可能点移动光标
How to move cursor at any possible point on the screen in C++?
我编写了以下代码,当我按Tab键
时,将鼠标移动到屏幕上的任何位置#define WINVER 0x0500
#include <windows.h>
#include <Winuser.h>
int main() {
while(true) {
//mi0 to move mouse to top left corner of screen
INPUT mi0[1] = {0};
mi0[0].type = INPUT_MOUSE;
mi0[0].mi.dx = -99999; // desired X coordinate
mi0[0].mi.dy = -99999; // desired Y coordinate
mi0[0].mi.dwFlags = MOUSEEVENTF_MOVE;
//mi1 to move mouse and click
INPUT mi1[3] = {0};
mi1[0].type = INPUT_MOUSE;
mi1[0].mi.dx = 1; // desired X coordinate
mi1[0].mi.dy = 1; // desired Y coordinate
mi1[0].mi.dwFlags = MOUSEEVENTF_MOVE;
mi1[1].type = INPUT_MOUSE;
mi1[1].mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
mi1[2].type = INPUT_MOUSE;
mi1[2].mi.dwFlags = MOUSEEVENTF_LEFTUP;
if (GetKeyState(VK_TAB) & 0x8000 ) {
Sleep(300);
SendInput(1, mi0, sizeof(INPUT));
Sleep(300);
SendInput(3, mi1, sizeof(INPUT));
}}}
这可以正常工作,除了DY和DX只能是整数,而诸如1.9或1.1之类的值读为1,其移动长度很长,因此我基本上仅限于屏幕上的少数点。如何修复此问题并在屏幕上移动鼠标。在任何方式可能相关的情况下,我使用Notepad 和mingw。任何帮助/指导都非常感谢。预先感谢。
像y.s一样,请检查Mouseeventf_absolute和Mousemovepoint。
dwflags改变了dx和dy的含义。但是您将永远不需要浮动价值。
如果指定了Mouseeventf_absolute值,则DX和DY包含0到65,535之间的归一化绝对坐标。事件过程将这些坐标映射到显示表面上。将(0,0(映射到显示表面的左上角;坐标(65535,65535(映射到较低的角落。
如果未设置此标志,则从上一个位置设置了DX像素和Dy像素的鼠标移动。
来自:https://msdn.microsoft.com/en-us/library/windows/desktop/ms646273(v = vs.85(.aspx
相关文章:
- 仅包含可移动 std::map 的类的移动构造函数不起作用
- 为什么协程的返回类型必须是可移动构造的?
- 我应该使我的局部变量常量还是可移动的
- 对于参加可复制和可移动类的访问者来说,应该有多少过载?
- 如何获取类型是否真正可移动可构造
- 可移动但不可复制的对象:按值传递还是按引用传递?
- 在C++中获取命名空间名称的任何可移植技巧
- 对于可移动类型,按值传递比重载函数更好吗?
- 使用参数将仅可移动对象捕获到 lambda
- 具有抑制移动构造/赋值的类型如何仍被视为可移动类型?
- 防止作用域枚举可复制/可移动
- 如何从 pjsip 发送电子邮件.是否有任何可用于发送电子邮件的默认方法
- 禁止可移动的QGraphics物品与其他物品发生冲突
- C 功能接受给定模板签名的任何可呼叫
- 在向量中使用派生的可移动但不可压缩的会导致编译错误
- 在可移动类型的构造函数 lambda 中捕获此内容的安全使用
- 从类返回可移动成员变量
- 在成员容器中复制具有仅可移动但可克隆类型的构造函数
- 不可复制但可移动的容器
- 在windows中确定可移动驱动器速度的任何方法