Windows API 模拟键鼠操作

移动鼠标位置

使用 SetCursorPos 可以移动鼠标位置:

1SetCursorPos(x, y);

在开启缩放的情况下,使用的是逻辑坐标,可以通过以下代码忽略缩放:

1SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2);

模拟鼠标点击

按下:

1INPUT input = {0};
2input.type = INPUT_MOUSE;
3input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;        // 鼠标左键按下
4SendInput(1, &input, sizeof(INPUT));

抬起:

1INPUT input = {0};
2input.type = INPUT_MOUSE;
3input.mi.dwFlags = MOUSEEVENTF_LEFTUP;          // 鼠标左键抬起
4SendInput(1, &input, sizeof(INPUT));

模拟键盘操作

按下:

1INPUT input = {0};
2input.type = INPUT_KEYBOARD;
3input.ki.wVk = key;                             // 虚拟按键码
4SendInput(1, &input, sizeof(INPUT));

抬起:

1INPUT input = {0};
2input.type = INPUT_KEYBOARD;
3input.ki.wVk = key;                             // 虚拟按键码
4input.ki.dwFlags = KEYEVENTF_KEYUP;             // 按键抬起
5SendInput(1, &input, sizeof(INPUT));