模拟鼠标事件的实现思路及代码

模拟鼠标事件,一般可以通过mouse_event()和SendInPut()两种方法。mouse_event()在windows后期版本中逐渐被SendInPut()取代。SendInPut()模拟鼠标移动的事件中,标志位取值不同,输入坐标的意义也不同。简单来说就是,添加MOUSEEVENTF_ABSOLUTE标志位表示鼠标移动是通过绝对坐标定位,此时的坐标要通过转换。光标在屏幕中被分成65535个小块,可以通过如下转换:

代码如下:

double fx = x *(65535.0f / fScreenWidth);
double fy = y *(65535.0f / fScreenHeight);

若不使用MOUSEEVENTF_ABSOLUTE标志位,则坐标是相对前一坐标的位移。

SendInPut()鼠标时间使用结构如下:

代码如下:

typedef struct tagMOUSEINPUT {
    LONG    dx;
    LONG    dy;
    DWORD   mouseData;
    DWORD   dwFlags;
    DWORD   time;
    ULONG_PTR dwExtraInfo;
} MOUSEINPUT, *PMOUSEINPUT, FAR* LPMOUSEINPUT;

msdn中完整解释如下:
     dx 鼠标的绝对位置,或自上次鼠标事件的运动量产生的dwFlags成员的值而定。鼠标的x坐标被指定为绝对的数据,相对于被指定为数据的移动像素数。
     dy 鼠标的绝对位置,或自上次鼠标事件的运动量产生的dwFlags成员的值而定。鼠标的y坐标被指定为绝对的数据,相对于被指定为数据的移动像素数。
     mouseData 如果dwFlags中包含MOUSEEVENTF_WHEEL,mouseData指定滚轮运动的量。正值表示滚轮向前旋转,即远离用户,负值表示滚轮向后旋转,即朝向用户。滚轮被定义为WHEEL_DELTA,这是120。

下面代码演示了鼠标的几个具体操作。
     1、我怎样才能在应用程序中模拟鼠标事件?

有两个API函数可以使用:mouse_event()和SendInput();

2、应该使用哪个API函数?

在Windows NT/2000/XP中,mouse_event()函数已经被SendInput()函数已被取代的。因此,在这些操作系统上,你应该使用SendInput()函数。(除非你需要提供向后兼容性与Windows98等)。

3、如何使用SendInput()函数来模拟点击鼠标左键?

代码如下:

void LeftClick ( )

    INPUT    Input={0};
    // 左键按下
    Input.type      = INPUT_MOUSE;
    Input.mi.dwFlags  = MOUSEEVENTF_LEFTDOWN;
    ::SendInput(1,&Input,sizeof(INPUT));

// 左键抬起
    ::ZeroMemory(&Input,sizeof(INPUT));
    Input.type      = INPUT_MOUSE;
    Input.mi.dwFlags  = MOUSEEVENTF_LEFTUP;
    ::SendInput(1,&Input,sizeof(INPUT));
}

4、如何使用SendInput()函数来模拟点击鼠标右键?

代码如下:

void RightClick ( )

    INPUT    Input={0};
    // 右键按下
    Input.type      = INPUT_MOUSE;
    Input.mi.dwFlags  = MOUSEEVENTF_RIGHTDOWN;
    ::SendInput(1,&Input,sizeof(INPUT));

// 右键抬起
    ::ZeroMemory(&Input,sizeof(INPUT));
    Input.type      = INPUT_MOUSE;
    Input.mi.dwFlags  = MOUSEEVENTF_RIGHTUP;
    ::SendInput(1,&Input,sizeof(INPUT));
}

5、如何使用SendInput()函数模拟鼠标的移动?


代码如下:

void MouseMove (int x, int y )

    double fScreenWidth    = ::GetSystemMetrics( SM_CXSCREEN )-1;
    double fScreenHeight  = ::GetSystemMetrics( SM_CYSCREEN )-1;
    double fx = x*(65535.0f/fScreenWidth);
    double fy = y*(65535.0f/fScreenHeight);
    INPUT  Input={0};
    Input.type      = INPUT_MOUSE;
    Input.mi.dwFlags  = MOUSEEVENTF_MOVE|MOUSEEVENTF_ABSOLUTE;
    Input.mi.dx = fx;
    Input.mi.dy = fy;
    ::SendInput(1,&Input,sizeof(INPUT));
}

6、如何使用SendInput()函数来模拟点击鼠标中键?

代码如下:

void MiddleClick()
{
    INPUT    Input={0};
    // 设置滚轮量
    Input.type      = INPUT_MOUSE;
    Input.mi.dwFlags  = MOUSEEVENTF_WHEEL;
    Input.mi.mouseData = 500;
    ::SendInput(1,&Input,sizeof(INPUT));
}

(0)

相关推荐

  • 模拟鼠标事件的实现思路及代码

    模拟鼠标事件,一般可以通过mouse_event()和SendInPut()两种方法.mouse_event()在windows后期版本中逐渐被SendInPut()取代.SendInPut()模拟鼠标移动的事件中,标志位取值不同,输入坐标的意义也不同.简单来说就是,添加MOUSEEVENTF_ABSOLUTE标志位表示鼠标移动是通过绝对坐标定位,此时的坐标要通过转换.光标在屏幕中被分成65535个小块,可以通过如下转换: 复制代码 代码如下: double fx = x *(65535.0f

  • Python捕捉和模拟鼠标事件的方法

    本文实例讲述了Python捕捉和模拟鼠标事件的方法.分享给大家供大家参考.具体分析如下: 这个假期玩了不少galgame,不过有些很老的游戏没有自动运行模式,点击鼠标又太伤按键了,于是想把滚动鼠标滚轮映射为点击鼠标. 网上搜了一下,没发现什么现成的软件,而按键精灵又太重量级了,于是考虑干脆自己用Python写个算了. 这里需要把PyHook和PyWin32都装上(建议下exe版,免得安装时各种蛋疼). 翻了翻教程,发现实现起来很简单: # -*- coding: utf-8 -*- import

  • 浏览器中视频播放器实现的基本思路与代码

    目录 前言 浏览器中的音视频知识总结 视频编码 封装格式 音视频标签 常用属性 常用事件 常用方法 整体思路如下 代码实现 总结 前言 自定义个播放器,组件都是用的原生的,所以有点丑,重点关注业务逻辑吧. 界面大概长下面这个样子. 大家可以看着界面,在脑海中想一下自己会如何实现这个视频播放器.可以问自己以下几个问题: 这个组件会接受那些props 如何获取视频的基本信息,包括时长,分辨率等 暂停.播放如何实现 拖动进度条的逻辑如何实现 视频初始加载显示loading如何处理 视频播放过程中卡顿显

  • JavaScript代码模拟鼠标自动点击事件示例

    利用JavaScript代码可以帮助我们实现鼠标的自动点击事件.比如点击了按钮1以后,JavaScript代码会自动去点击下一个按钮,一直点击到按钮5才会停止(可根据实际情况进行相应的调整). 效果图如下所示: 按钮1被点击以后,通过JavaScript的代码自动点击按钮2,代码点击了按钮2之后又会去点击按钮3,以此类推,直到点击到按钮5为止. 首先先设置几个按钮,然后再设置一个盒子包裹着一些文字,方便我们在接下来js部分中更换里面的内容时,更加直观的看到它的效果. HTML代码部分: 通过cs

  • 浅析Android 模拟键盘鼠标事件

    通过Socket + Instrumentation实现模拟键盘鼠标事件主要通过以下三个部分组成:Socket编程:实现PC和Emulator通讯,并进行循环监听Service服务:将Socket的监听程序放在Service中,从而达到后台运行的目的.这里要说明的是启动服务有两种方式,bindService和startService,两者的区别是,前者会使启动的Service随着启动Service的Activity的消亡而消亡,而startService则不会这样,除非显式调用stopServi

  • Python监听键盘和鼠标事件的示例代码

    我们可以利用windows提供的api函数来实现对系统键盘事件和鼠标事件的监听,主要利用的是SetWindowsHookEx函数,这个函数可以允许调用者传入一个钩子函数也叫回调函数,当指定的事件发生时,你 传入的函数就会被触发,有些事件是进程级的,有些事件是系统级的,这里我们用WH_KEYBOARD_LL来监听系统键盘事件,用WH_MOUSE_LL来监听鼠标事件,注意不是WH_KEYBOARD,使用WH_KEYBOARD是无法监听到外部 程序的事件的,这个可以在windows官方文档里面看到说明

  • 用pywin32实现windows模拟鼠标及键盘动作

    因为要批量用某软件处理一批eps文件,所以要模拟鼠标及键盘动作,使其能够自动化操作. 复制代码 代码如下: #-*-coding:utf-8-*-import osimport timeimport win32guiimport win32apiimport win32confrom PIL import ImageGrab #os.startfile("D:\\artcut6\\Prog\\Artcut6.exe")#time.sleep(1) wdname1=u"文泰刻绘

  • C#采用mouse_event函数实现模拟鼠标功能

    下面我通过代码为大家分享下C#模拟鼠标,具体内容如下: 想必有很多人在项目开发中可能遇见需要做模拟鼠标点击的小功能,很多人会在百度过后采用mouse_event这个函数,不过我并不想讨论如何去使用mouse_event函数怎么去使用,因为那没有多大意义. static void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo) { int x = dx, y = dy; edit_position(dw

  • 易语言模拟鼠标点击实现方法

    易语言对于初学者而言是一种非常好学的中文编程语言,能够快速地实现很多功能,全汉语编程,简单易上手,易语言功能强大实用,系统全部自行设计开发,且易语言自带的即时帮助系统,非常方便. 这里,教大家如何实现模拟鼠标点击. 1.进入易语言界面,在右边的工具栏中,分别找到"编辑框""标签""按钮"三个控件. 2.在主编辑界面中,如图所示摆放位置,进行初步界面搭建. 3.在左侧的属性栏中找到"标题"属性,分别给标签设置为"X&q

  • python模拟鼠标点击和键盘输入的操作

    所有代码都是网上百度出来的,通过个人实践找到适合自己的. 采用的python 库是 pymouse.pykeyboard 安装时直接pip安装的,pip install PyUserInput 安装不成功的可以参照http://www.lfd.uci.edu/~gohlke/pythonlibs/这个地址,内容很全 实现了一个最简单的输入密码,enter进入的登录过程 如果想遍历,可以使用itertools 包,很有用,具体用法这里不介绍了. · 鼠标点击 有m.click(x, y, butt

随机推荐