当前位置:  编程技术>c/c++/嵌入式

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

    来源: 互联网  发布时间:2014-10-23

    本文导语:  模拟鼠标事件,一般可以通过mouse_event()和SendInPut()两种方法。mouse_event()在windows后期版本中逐渐被SendInPut()取代。SendInPut()模拟鼠标移动的事件中,标志位取值不同,输入坐标的意义也不同。简单来说就是,添加MOUSEEVENTF_ABSOLUTE...

模拟鼠标事件,一般可以通过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));
}

    
 
 

您可能感兴趣的文章:

  • 给个思路:在linux下写个服务器-客户端程序模拟网上购物或仓库之类的进出帐等。
  • 模拟一个路由器转发,从一个IP上转发包给另一个IP,不要源码,给个思路就好
  • Android模拟器中窗口截图存成文件实现思路及代码
  • php 模拟 asp.net webFrom 按钮提交事件的思路及代码
  • php开源软件 iis7站长之家
  • 图形界面中如何发送鼠标事件/信号,来模拟鼠标动作
  • LINUX中如何模拟鼠标和键盘的按键动作
  • linux下如何用C++来监听和模拟鼠标事件
  • 如何模拟鼠标事件
  • linux下如何用模拟鼠标的移动和点击事件
  • 使用JS或jQuery模拟鼠标点击a标签事件代码
  • winform模拟鼠标按键的具体实现
  • 浅析Android 模拟键盘鼠标事件
  • 请问JAVA怎么模拟鼠标和键盘事件[200分]
  • 用pywin32实现windows模拟鼠标及键盘动作
  • linux用驱动模拟一次鼠标的操作
  • C# SendInput 模拟鼠标操作的实现方法
  • python之模拟鼠标键盘动作具体实现
  • windows下python模拟鼠标点击和键盘输示例
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 我要模拟键盘事件,可是中文输入法接不到
  • jquery trigger()方法模拟事件的例子
  • Jquery与CSS模拟超链接的用户单击事件的代码学习
  • Red Hat linux 图形界面下模拟键盘事件如何实现?
  • jquery实例 获取页面url且根据url模拟单击事件
  • 电路教学模拟器 稳恒电路模拟器
  • php模拟登录 php curl模拟登录教程大全
  • 在Android模拟器上模拟GPS功能总是null的解决方法
  • Intel HAXM为Android 模拟器加速解决模拟器运行慢的问题
  • php模拟qq登录 php模拟登录实例
  • ◆◆◆◆◆◆◆j2me中,用repaint()在同一地方重画图象,当我画到二十几遍后,手机模拟器就出错或者程序自动退出。我想是不是由于重画时,以前的图片好保存在模拟器的内存中,当重画到一定数时,内存不够,便出错了。还是其他的原因?请问如何解决?
  • 指令级机器模拟器 GXemul
  • FC模拟器 Nintendulator
  • 任天堂游戏模拟器 VisualBoyAdvance
  • 在线模拟考试系统 PHPems
  • EFL设计示波器,模拟量输入的问题
  • PSP模拟器 JPcsp
  • 电路模拟器 Qucs
  • JavaScript 模拟器库 Virtjs
  • 单元测试模拟框架 PowerMock
  • Linux游戏模拟器 Xmame
  • 微控制器模拟器 PICsim
  • NDS模拟器 DeSmuME
  • FC 模拟器 Nestopia
  • PS2模拟器 PCSX2


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3