21xrx.com
2024-06-03 05:40:42 Monday
登录
文章检索 我的文章 写文章
C++ WinIO 模拟鼠标操作
2023-07-04 22:50:30 深夜i     --     --
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 实现鼠标操作可以方便地实现各种自动化控制和测试应用,例如图像处理和游戏编程等。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复