`
yangyou230
  • 浏览: 1651936 次
文章分类
社区版块
存档分类

VC控制鼠标操作

 
阅读更多

[转载]http://blog.csdn.net/aidy22/archive/2009/08/18/4457725.aspx

在完成实例之前,我们先来学习mouse_event()这个函数

函数功能:该函数综合鼠标击键和鼠标动作。

  函数原型:

  VOID mouse_event(

  DWORD dwFlags, // motion and click options

  DWORD dx, // horizontal position or change

  DWORD dy, // vertical position or change

  DWORD dwData, // wheel movement

  ULONG_PTR dwExtraInfo // application-defined information

  );

  参数:

  dwFlags:标志位集,指定点击按钮和鼠标动作的多种情况。此参数里的各位可以是下列值的任何合理组合:

  MOUSEEVENTF_ABSOLUTE:表明参数dX,dy含有规范化的绝对坐标。如果不设置此位,参数含有相对数据:相对于上次位置的改 动位置。此标志可被设置,也可不设置,不管鼠标的类型或与系统相连的类似于鼠标的设备的类型如何。要得到关于相对鼠标动作的信息,参见下面备注部分。

  MOUSEEVENTFMOVE:表明发生移动。

  MOUSEEVENTF_LEFTDOWN:表明接按下鼠标左键。

  MOUSEEVENTF_LEFTUP:表明松开鼠标左键。

  MOUSEEVENTF_RIGHTDOWN:表明按下鼠标右键。

  MOUSEEVENTF_RIGHTUP:表明松开鼠标右键。

  MOUSEEVENTF_MIDDLEDOWN:表明按下鼠标中键。

  MOUSEEVENTF_MIDDLEUP:表明松开鼠标中键。

  MOUSEEVENTF_WHEEL:在Windows NT中如果鼠标有一个轮,表明鼠标轮被移动。移动的数量由dwData给出。

  dx:指定鼠标沿x轴的绝对位置或者从上次鼠标事件产生以来移动的数量,依赖于MOUSEEVENTF_ABSOLOTE的设置。给出的绝对数 据作为鼠标的实际X坐标;给出的相对数据作为移动的mickeys数。一个mickey表示鼠标移动的数量,表明鼠标已经移动。

  dy:指定鼠标沿y轴的绝对位置或者从上次鼠标事件产生以来移动的数量,依赖于MOUSEEVENTF_ABSOLVTE的设置。给出的绝对数据作为鼠标的实际y坐标,给出的相对数据作为移动的mickeys数。

  dwData:如果dwFlags为MOUSEEVENTF_WHEEL,则dwData指定鼠标轮移动的数量。正值表明鼠标轮向前转动,即远离用户的方向;负值表明鼠标轮向后转动,即朝向用户。一个轮击定义为WHEEL_DELTA,即120。

  如果dwFlagsS不是MOUSEEVENTF_WHEEL,则dWData应为零。

  dwExtralnfo:指定与鼠标事件相关的附加32位值。应用程序调用函数GetMessgeExtrajnfo来获得此附加信息。

  返回值:无。

  备注:如果鼠标被移动,用设置MOUSEEVENTF_MOVE来表明,dX和dy保留移动的信息。给出的信息是绝对或相对整数值。

  如果指定了MOUSEEVENTF_ABSOLOTE值,则dX和dy含有标准化的绝对坐标,其值在0到65535之间。事件程序将此坐标映射到显示表面。坐标(0,0)映射到显示表面的左上角,(6553,65535)映射到右下角。

  如果没指定MOUSEEVENTF_ABSOLOTE,dX和dy表示相对于上次鼠标事件产生的位置(即上次报告的位置)的移动。正值表示鼠标向右(或下)移动;负值表示鼠标向左(或上)移动。

  鼠标的相对移动服从鼠标速度和加速度等级的设置,一个最终用户用鼠标控制面板应用程序来设置这些值,应用程序用函数SystemParameterslnfo来取得和设置这些值。

学习了mouse_event()这个函数以后,我们也都知道SetCursorPos这个函数是设置鼠标的位置,因此我们就很容易的想到先把鼠标移动到我们所要点击的按钮的位置,然后再调用mouse_event()这个函数来完成点击事件,这样就完成了。

当然了有的朋友会说我们做这个点击希望鼠标好像没有移动过一样,上面我们知道SetCursorPos这个函数是用来设置鼠标的位置,那么应该也会有个函 数是用来获得鼠标当前的位置,由Set我们很容易的就想到了GetCursorPos,答对了,所以我们可以先获取当前鼠标的位置,然后再把鼠标移动到我 们想要点击的位置,接着完成点击,最后将鼠标移回原来的位置。

下面是实例代码:

void CMouseEventDlg::OnButton1()
{

//模拟鼠标点击
CPoint point;
GetCursorPos(&point);
SetCursorPos( 47,729);//这个坐标是“开始”这个菜单在我当前电脑屏幕上的位置,大家可以自己去获取
mouse_event( MOUSEEVENTF_LEFTDOWN, 0,0,0,NULL);//鼠标down事件
mouse_event( MOUSEEVENTF_LEFTUP, 0,0,0,NULL);//鼠标up事件
SetCursorPos(point.x,point.y);

这里用的是MOUSEEVENTF_LEFTDOWN和MOUSEEVENTF_LEFTUP,如果是左撇子的话应该改为MOUSEEVENTF_RIGHTDOWN和MOUSEEVENTF_RIGHTUP的。


分享到:
评论

相关推荐

    VC 2008 鼠标控制操作源代码

    首先声明,本程序需要在vc2008下可以编译运行. HOOK鼠标操作 路径计算 控制WPS的很多操作

    VC6控制鼠标程序,通过SetCursorPos与mouse_event完成功能

    主要功能,每隔一分钟对屏幕中心进行自动模拟鼠标点击操作,包括移动与点击 该程序同时演示了托盘区与定时器的操作 下载注意,该程序方法不能对后台窗口发送鼠标事件

    VC 远程桌面控制的实现.rar

    VC 远程桌面控制的实现,C/S结构,使用CSocket,实现思路主要是先将远程桌面捕获,再发回本地,在对话框中显示出来,将本地鼠标和盘键输入,变成命令,发到远程主机执行,以模拟出鼠标和键盘的操作,再将远程桌面捕获,再发...

    C++代码实现Windows系统下发送鼠标移动和单击的程序

    c++代码实现系统层发送鼠标移动和单击消息,可实现模拟人工点按某个按钮的功能。基于此代码可进行功能扩充,例如录制多个按钮位置实现组合操作的自动化执行。

    vc设计托盘图标

    在Windows操作系统中,任务栏的右边(托盘)会常驻几个图标,如输入法切换图标、音量控制图标等,此外我们还经常遇到具有托盘图标的软件,如金山词霸、实时监测功能的杀毒软件等。这些软件在后台运行,通常不占用太多...

    VC,代码控制光标,截获键盘信息,截获鼠标移开事件,模拟键盘输入,模拟鼠标的单双击,鼠标位置追踪,限定鼠标区域

    代码控制光标,截获键盘信息,截获鼠标移开事件,模拟键盘输入,模拟鼠标的单双击,鼠标位置追踪,限定鼠标区域. 以上这些VC源码的打包.

    局域网鼠标共享源代码(VC6.0)

    没事时写着玩玩的程序。 使用UDP来发送控制消息,操作网络上的鼠标。 包括一个客户端程序(控制方)和一个服务端程序(受控方)。 两个均是基于VC的对话框程序。

    屏幕监控+远程控制+mfc+vc.rar

    vc6.0 MFC开发 屏幕监控+远程控制 支持鼠标键盘多种消息的操作 功能强大

    VC6.0 3D魔方游戏完整源代码.rar

    VC 6.0 编写的3D魔方游戏附代码,开发智力的益智小游戏。...这款魔方游戏玩法:用鼠标选中需要调整的魔方方块,点击右侧的对应操作,即可改变魔方状态。借助本游戏源码你可了解一些用VC 6.0编写游戏的基础技巧。

    《用应用程序模拟键盘和鼠标按键》配套VC源代码

    对这些程序的操作不外乎两种,键盘输入控制和鼠标输入控制。有时,对于繁杂的,或重复性的输入操作,我们能否通过编制程序来代替手工输入,而用程序来模拟键盘及鼠标的输入呢?答案是肯定的。这里主要是通过两个...

    VC 课程设计:远程桌面监控系统 源码 文档.rar

    VC 课程设计:远程桌面监控系统 源码 文档,四川理工学院计算机科学系。程序可让您同时访问不同的远程计算机,无论何时何地,关键词:TCP;事件驱动;网络;套接字;远程桌面控制显示另一台计算机的屏幕(透过网际...

    [Visual.C++编程技巧精选200例]5.rar

    vc常用的实例,其中讲解了:消息框、常用控件、通用对话框、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、...

    VC禁止窗口移动,不可移动的窗体

    摘要:VC/C++源码,界面编程,窗体移动 禁止窗口移动,VC++实现一个不可移动的窗体制作实例,点击窗体的标题栏,按住鼠标,也不能拖动该窗体,它一动不动,好像从不理你,而且也去掉了窗口右上角的最大化和最小化按钮...

    vc++ 应用源码包_6

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    VC 6.0 一个学习GIS和路径算法的范例源码.rar

    操作简单,用鼠标分别选中起始点和目的地点,系统自动计算最佳换乘路线。  图层控制,用户可以通过图层选项,根据喜好,定制地图显示内容。  界面下部信息框显示相关公交路线,路径信息,和地址附近的公交站点信息...

    VC++常用功能实例

    问:VC6.0对VC5.0的兼容性? 64 问:打印和打印机的问题? 64 问:CRichEditCtrl滚动条的问题? 65 问:从数据库中读大于32k的内容? 65 问:如何获得CRichEditCtrl中字符的位置? 66 问:如何限制mdi子框架最大化时的...

    C++模拟鼠标移动和单击双击

    C++模拟鼠标移动,设定光标位置, 模拟鼠标单击双击操作,点击对应的按钮实现相应的鼠标操作,比如点击双击标题栏,则窗口最大化,移动光标则会改变鼠标光标的位置。 运行环境:Windows/Visual C/C++

    VC环境下多波形显示ActiveX控件开发

    为了对工业控制类软件中采集的大量数据进行图形化显示,采用Visual C++设计并实现了一个可用于多 个波形显示的ActiveX 控件。该控件采用位图双缓冲机制,避免了图像闪烁。显示图数量、前景色、背景色及线型均 可设;...

    绘制可旋转的彩色立方体

    本实例制作一个可以由鼠标拖动事件控制的自由旋转立方体,无操作时,自己旋转,程序已在vc6.0 和vs09上通过

Global site tag (gtag.js) - Google Analytics