windows下控制鼠标移动和点击的c语言实现

最近由于老婆工作上有抢单的需求,需要一款自动处理鼠标事件的小程序,之前也没有编写过直接操作系统资源的程序,所以一开始是

打算用python来写,毕竟脚本语言实现起来方便,可是后来实施起来发现需要安装很多库,而且有些库就是怎么都安装不上大哭,于是就放

弃了。后来查阅了一些资料,看了很多别人写的博客,发现用C#和mfc实现的比较多,mfc这东西我本身就不感兴趣,果断放弃,倒是C#吸

引了我,但是发现新买的电脑还没有装Visual Studio,而且我又比较懒,只能放弃了,最后决定用VC控制台程序来实现。其实这个程序实现

的关键就是调用windows api中的user32.dll中的两个函数就搞定了,这里要特别感谢一篇不知作者的文章,给了我提示,文章的链接是

http://www.2cto.com/kf/201410/343342.html。废话不多说,直接上代码。以下是代码中的两个关键函数封装,完整可运行代码请到

http://download.csdn.net/detail/zjuman2007/9922444下载。


//this macro already defined
//const int MOUSEEVENTF_MOVE = 0x0001;      //移动鼠标
//const int MOUSEEVENTF_LEFTDOWN = 0x0002;  //模拟鼠标左键按下 
//const int MOUSEEVENTF_LEFTUP = 0x0004;    //模拟鼠标左键抬起 
//const int MOUSEEVENTF_RIGHTDOWN = 0x0008; //模拟鼠标右键按下 
//const int MOUSEEVENTF_RIGHTUP = 0x0010;   //模拟鼠标右键抬起 
//const int MOUSEEVENTF_MIDDLEDOWN = 0x0020;//模拟鼠标中键按下 
//const int MOUSEEVENTF_MIDDLEUP = 0x0040;  //模拟鼠标中键抬起 
//const int MOUSEEVENTF_ABSOLUTE = 0x8000;  //标示是否采用绝对坐标

/** mouse move
 * x -- int, x-coordinate
 * y -- int, y-coordinate
 */
int move(int x, int y){
	HINSTANCE hDll;  
	typedef bool (*Fun1)(int,int);
	hDll = LoadLibrary("user32.dll");
	if(NULL == hDll)  
  {  
  	fprintf(stderr, "load dll 'user32.dll' fail.");  
    return -1;  
  }
  
  Fun1 SetCursorPos = (Fun1)GetProcAddress(hDll, "SetCursorPos");  
  if(NULL == SetCursorPos)  
  {  
  	fprintf(stderr, "call function 'SetCursorPos' fail.");  
    FreeLibrary(hDll);  
    return -1;  
  }
  SetCursorPos(x,y);
  FreeLibrary(hDll);  
  return 0;
}

/** mouse click
 * type          -- int, 0:left click;1:right click 
 * double_click  -- bool, true:double click; false: single click
 */
int click(int type,bool double_click){
	int left_click = MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP;
	int right_click = MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP;
	int clicktype;
	HINSTANCE hDll;  
	typedef void (*Fun2)(
			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
	);

	hDll = LoadLibrary("user32.dll");
	if(NULL == hDll)  
  {  
  	fprintf(stderr, "load dll 'user32.dll' fail.");  
    return -1;  
  }
  
  Fun2 mouse_event = (Fun2)GetProcAddress(hDll, "mouse_event");  
  if(NULL == mouse_event)  
  {  
  	fprintf(stderr, "call function 'mouse_event' fail.");  
    FreeLibrary(hDll);  
    return -1;  
  }
  if(type==0)
  	clicktype = left_click;
  else
  	clicktype = right_click;
  mouse_event (clicktype, 0, 0, 0, 0 );
	FreeLibrary(hDll);
	if(double_click)
		click(type,false);
  return 0;
}


  • 20
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
f1 显示当前程序或者windows的帮助内容。 f2 当你选中一个文件的话,这意味着“重命名” f3 当你在桌面上的时候是打开“查找:所有文件” 对话框 f10或alt 激活当前程序的菜单栏 windows键或ctrl+esc 打开开始菜单 ctrl+alt+delete 在win9x中打开关闭程序对话框 delete 删除被选择的选择项目,如果是文件,将被放入回收站 shift+delete 删除被选择的选择项目,如果是文件,将被直接删除而不是放入回收站 ctrl+n 新建一个新的文件 ctrl+o 打开“打开文件”对话框 ctrl+p 打开“打印”对话框 ctrl+s 保存当前操作的文件 ctrl+x 剪切被选择的项目到剪贴板 ctrl+insert 或 ctrl+c 复制被选择的项目到剪贴板 shift+insert 或 ctrl+v 粘贴剪贴板中哪谌莸降鼻拔恢? alt+backspace 或 ctrl+z 撤销上一步的操作 alt+shift+backspace 重做上一步被撤销的操作 windows键+m 最小化所有被打开的窗口。 windows键+ctrl+m 重新将恢复上一项操作前窗口的大小和位置 windows键+e 打开资源管理器 windows键+f 打开“查找:所有文件”对话框 windows键+r 打开“运行”对话框 windows键+break 打开“系统属性”对话框 windows键+ctrl+f 打开“查找:计算机”对话框 shift+f10或鼠标右击 打开当前活动项目的快捷菜单 shift 在放入cd的时候按下不放,可以跳过自动播放cd。在打开word的时候按下不放,可以跳过自启动的宏 alt+f4 关闭当前应用程序 alt+spacebar 打开程序最左上角的菜单 alt+tab 切换当前程序 alt+esc 切换当前程序 alt+enter 将windows下运行的msdos窗口在窗口和全屏幕状态间切换 print screen 将当前屏幕以图象方式拷贝到剪贴板 alt+print screen 将当前活动程序窗口以图象方式拷贝到剪贴板 ctrl+f4 关闭当前应用程序中的当前文本(如word中) ctrl+f6 切换到当前应用程序中的下一个文本(加shift 可以跳到前一个窗口) 在ie中: alt+right arrow 显示前一页(前进键) alt+left arrow 显示后一页(后退键) ctrl+tab 在页面上的各框架中切换(加shift反向) f5 刷新 ctrl+f5 强行刷新 目的快捷键 激活程序中的菜单栏 f10 执行菜单上相应的命令 alt+菜单上带下划线的字母 关闭多文档界面程序中的当 前窗口 ctrl+ f4 关闭当前窗口或退出程序 alt+ f4 复制 ctrl+ c 剪切 ctrl+ x 删除 delete 显示所选对话框项目的帮助 f1 显示当前窗口的系统菜单 alt+空格键 显示所选项目的快捷菜单 shift+ f10 显示“开始”菜单 ctrl+ esc 显示多文档界面程序的系统 菜单 alt+连字号(-) 粘贴 ctr l+ v 切换到上次使用的窗口或者 按住 alt然后重复按tab, 切换到另一个窗口 alt+ tab 撤消 ctrl+ z 二、使用“windows资源管理器”的快捷键 目的快捷键 如果当前选择展开了,要折 叠或者选择父文件夹左箭头 折叠所选的文件夹 num lock+负号(-) 如果当前选择折叠了,要展开 或者选择第一个子文件夹右箭头 展开当前选择下的所有文件夹 num lock+* 展开所选的文件夹 num lock+加号(+) 在左右窗格间切换 f6 三、使用 windows键 可以使用 microsoft自然键盘或含有 windows徽标键的其他任何兼容键盘的以下快捷键。 目的快捷键 在任务栏上的按钮间循环 windows+ tab 显示“查找:所有文件windows+ f 显示“查找:计算机” ctrl+ windows+ f 显示“帮助” windows+ f1 显示“运行”命令 windows+ r 显示“开始”菜单 windows 显示“系统属性”对话框 windows+ break 显示“windows资源管理器” windows+ e 最小化或还原所有窗口 windows+ d 撤

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值