21xrx.com
2025-04-28 12:53:17 Monday
文章检索 我的文章 写文章
C++ WinIO 模拟鼠标操作
2023-07-04 22:50:30 深夜i     117     0
C++ programming language WinIO library Mouse simulation Input/output operations Windows operating sy

C++ WinIO 是一种基于 Windows 操作系统的模拟输入输出的技术,它可以实现模拟键盘、鼠标等各种输入设备,并可以实现自动化控制和测试等应用。本文将介绍使用 C++ WinIO 模拟鼠标操作的方法。

首先,需要安装 WinIO 驱动程序,并下载它的相关库文件,包括 io64.h、WinIo32.lib 和 WinIO.dll。然后,将这些文件添加到 C++ 项目中,并编写以下代码:

#include <windows.h>
#include "io64.h"
#define PORT_ADDR 0x64
#define DATA_ADDR 0x60
void PressMouseButton(DWORD button)
{
  WORD wScan = MapVirtualKey(button, MAPVK_VK_TO_VSC);
  keybd_event(button, wScan, 0, 0);
}
void ReleaseMouseButton(DWORD button)
{
  WORD wScan = MapVirtualKey(button, MAPVK_VK_TO_VSC);
  keybd_event(button, wScan, KEYEVENTF_KEYUP, 0);
}
void MoveMouse(int x, int y)
{
  DWORD dwBytesReturned = 0;
  DWORD dwOldVal = 0;
  if (!InitializeWinIo())
    return;
  GetPortVal(PORT_ADDR, &dwOldVal, 1);
  Sleep(10);
  SetPortVal(PORT_ADDR, 0xD4, 1);
  Sleep(10);
  SetPortVal(DATA_ADDR, 0xF4, 1);
  Sleep(10);
  GetPortVal(DATA_ADDR, &dwBytesReturned, 1);
  Sleep(10);
  SetPortVal(DATA_ADDR, (BYTE)(x & 0xFF), 1);
  Sleep(10);
  GetPortVal(DATA_ADDR, &dwBytesReturned, 1);
  Sleep(10);
  SetPortVal(DATA_ADDR, (BYTE)(y & 0xFF), 1);
  Sleep(10);
  GetPortVal(DATA_ADDR, &dwBytesReturned, 1);
  ShutDownWinIo();
}
int main()
{
  // 模拟鼠标左键单击
  PressMouseButton(VK_LBUTTON);
  Sleep(100);
  ReleaseMouseButton(VK_LBUTTON);
  // 模拟鼠标移动到屏幕中心
  int x = GetSystemMetrics(SM_CXSCREEN) / 2;
  int y = GetSystemMetrics(SM_CYSCREEN) / 2;
  MoveMouse(x, y);
  return 0;
}

在此代码中,PressMouseButton 和 ReleaseMouseButton 函数模拟了鼠标按下和松开的动作,并使用 keybd_event 函数发送键盘事件。MoveMouse 函数模拟鼠标移动的过程,并使用 WinIO 的输入输出 API 完成底层的模拟操作。

运行这个程序后,可以看到鼠标在屏幕上自动进行了左键单击和移动到中央的操作。使用 C++ WinIO 实现鼠标操作可以方便地实现各种自动化控制和测试应用,例如图像处理和游戏编程等。

  
  

评论区

请求出错了