VC 动态控制鼠标点击事件

转载http://blog.csdn.net/aidy22/article/details/4457725

在完成实例之前,我们先来学习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的。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: VC鼠标自动循环点击源代码是指使用VC(Visual C++)编程语言编写的程序,用于实现鼠标自动循环点击的功能。以下是一个简单的示例代码: ```c++ #include <Windows.h> // 引入Windows.h头文件 int main() { int count = 0; // 设置点击次数 int interval = 1000; // 设置点击间隔(单位:毫秒) while(count < 10) // 循环点击10次 { POINT p; // 定义一个点的结构体,用于保存当前鼠标坐标 GetCursorPos(&p); // 获取当前鼠标坐标 mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, p.x, p.y, 0, 0); // 模拟鼠标左键点击 Sleep(interval); // 休眠指定的时间间隔 count++; // 点击次数自增 } return 0; } ``` 以上代码通过循环控制鼠标的点击次数,通过`GetCursorPos`函数获取鼠标当前的坐标,并通过`mouse_event`函数模拟鼠标左键的点击操作。同时,通过`Sleep`函数实现点击间隔的控制。该代码简单实现了鼠标自动循环点击的功能。 ### 回答2: 要编写VC鼠标自动循环点击的源代码,可以使用以下步骤: 1. 引入相关库和头文件:在代码开头使用`#include`指令引入`Windows.h`头文件,以及一些其他可能需要的库和头文件。 2. 定义主函数:使用`int main()`定义主函数。 3. 获取屏幕尺寸:使用`GetSystemMetrics()`函数获取屏幕的宽度和高度。 4. 创建鼠标点击的循环:使用`for`循环,设置循环次数或使用`while`循环,并给一个终止循环的条件。 5. 声明鼠标点击位置:使用`MOUSE_EVENTF_LEFTDOWN`和`MOUSE_EVENTF_LEFTUP`来模拟鼠标左键的按下和抬起操作。 6. 鼠标点击位置:使用`SetCursorPos()`函数设定鼠标点击的位置,可以使用特定的坐标点,也可以使用屏幕尺寸进行随机点击。 7. 进行鼠标点击操作:使用`mouse_event()`函数来模拟鼠标点击。 8. 设置鼠标点击的延迟:使用`Sleep()`函数设置鼠标点击之间的延迟,以控制点击速度。 9. 释放资源:使用`ReleaseCapture()`函数来释放鼠标捕捉。 10. 返回值:使用`return`语句返回0。 总的来说,以上步骤描述了实现VC鼠标自动循环点击的基本流程和代码框架。具体的实现还需根据实际需求进一步完善和调整。希望能对你有所帮助。 ### 回答3: vc鼠标自动循环点击源代码可以使用C++编写,以下是一个简单的实现: ```c++ #include <windows.h> int main() { // 获取屏幕宽高 int screenWidth = GetSystemMetrics(SM_CXSCREEN); int screenHeight = GetSystemMetrics(SM_CYSCREEN); // 设置鼠标点击位置 int posX = screenWidth / 2; int posY = screenHeight / 2; // 设置点击次数和间隔时间 int clickCount = 10; int interval = 1000; // 循环模拟鼠标点击 for (int i = 0; i < clickCount; i++) { // 移动鼠标到指定位置 SetCursorPos(posX, posY); // 模拟鼠标左键按下和抬起 mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); // 间隔一定时间后继续下一次点击 Sleep(interval); } return 0; } ``` 以上代码使用了Windows API中的一些函数和结构体实现了鼠标自动循环点击的功能。具体步骤如下: 1. 获取屏幕的宽度和高度,用来确定鼠标点击位置。 2. 设置需要点击的次数和每次点击的间隔时间。 3. 使用一个循环来模拟鼠标点击操作。 4. 在每次循环中,先将鼠标移动到指定的位置,再模拟鼠标左键按下和抬起的操作。 5. 最后,在每次点击之间间隔指定的时间。 以上代码只是一个简单的示例,可以根据实际需求进行修改和扩展。注意,在编译和运行代码前,需要在项目属性中添加Windows SDK的库文件依赖。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值