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下载。

  1. //this macro already defined
  2. //const int MOUSEEVENTF_MOVE = 0x0001; //移动鼠标
  3. //const int MOUSEEVENTF_LEFTDOWN = 0x0002; //模拟鼠标左键按下
  4. //const int MOUSEEVENTF_LEFTUP = 0x0004; //模拟鼠标左键抬起
  5. //const int MOUSEEVENTF_RIGHTDOWN = 0x0008; //模拟鼠标右键按下
  6. //const int MOUSEEVENTF_RIGHTUP = 0x0010; //模拟鼠标右键抬起
  7. //const int MOUSEEVENTF_MIDDLEDOWN = 0x0020;//模拟鼠标中键按下
  8. //const int MOUSEEVENTF_MIDDLEUP = 0x0040; //模拟鼠标中键抬起
  9. //const int MOUSEEVENTF_ABSOLUTE = 0x8000; //标示是否采用绝对坐标
  10. /** mouse move
  11. * x -- int, x-coordinate
  12. * y -- int, y-coordinate
  13. */
  14. int move(int x, int y){
  15. HINSTANCE hDll;
  16. typedef bool (*Fun1)(int,int);
  17. hDll = LoadLibrary('user32.dll');
  18. if(NULL == hDll)
  19. {
  20. fprintf(stderr, 'load dll 'user32.dll' fail.');
  21. return -1;
  22. }
  23. Fun1 SetCursorPos = (Fun1)GetProcAddress(hDll, 'SetCursorPos');
  24. if(NULL == SetCursorPos)
  25. {
  26. fprintf(stderr, 'call function 'SetCursorPos' fail.');
  27. FreeLibrary(hDll);
  28. return -1;
  29. }
  30. SetCursorPos(x,y);
  31. FreeLibrary(hDll);
  32. return 0;
  33. }
  34. /** mouse click
  35. * type -- int, 0:left click;1:right click
  36. * double_click -- bool, true:double click; false: single click
  37. */
  38. int click(int type,bool double_click){
  39. int left_click = MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP;
  40. int right_click = MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP;
  41. int clicktype;
  42. HINSTANCE hDll;
  43. typedef void (*Fun2)(
  44. DWORD dwFlags, // motion and click options
  45. DWORD dx, // horizontal position or change
  46. DWORD dy, // vertical position or change
  47. DWORD dwData, // wheel movement
  48. ULONG_PTR dwExtraInfo // application-defined information
  49. );
  50. hDll = LoadLibrary('user32.dll');
  51. if(NULL == hDll)
  52. {
  53. fprintf(stderr, 'load dll 'user32.dll' fail.');
  54. return -1;
  55. }
  56. Fun2 mouse_event = (Fun2)GetProcAddress(hDll, 'mouse_event');
  57. if(NULL == mouse_event)
  58. {
  59. fprintf(stderr, 'call function 'mouse_event' fail.');
  60. FreeLibrary(hDll);
  61. return -1;
  62. }
  63. if(type==0)
  64. clicktype = left_click;
  65. else
  66. clicktype = right_click;
  67. mouse_event (clicktype, 0, 0, 0, 0 );
  68. FreeLibrary(hDll);
  69. if(double_click)
  70. click(type,false);
  71. return 0;
  72. }
(0)

相关推荐