1. #include <time.h>
  2. #include <stdio.h>
  3. #include <Windows.h>
  4.  
  5. HANDLE ghMutex;
  6.  
  7. ///////////////////////////////////////////////////////////////////////////////////
  8. /* 移动鼠标的位置(相对)
  9. * the amount of motion since the last mouse event was generated
  10. * @dx : relative x coordinate is specified as the number of pixels moved
  11. * @dy : relative y coordinate is specified as the number of pixels moved
  12. */
  13. int MoveMouse(LONG dx, LONG dy)
  14. {
  15. UINT ret;
  16. INPUT input = { };
  17.  
  18. input.type = INPUT_MOUSE;
  19. input.mi.time = ;//the system will provide time stamp
  20. input.mi.dwFlags = MOUSEEVENTF_MOVE; //Movement occurred.
  21. input.mi.dx = dx;
  22. input.mi.dy = dy;
  23.  
  24. //send Mouse Event
  25. ret = SendInput(, &input, sizeof(INPUT));
  26. if (ret != ) {
  27. printf("SendInput failed, %ld\n", GetLastError());
  28. return -;
  29. }
  30.  
  31. //Assumes the mouse sampling rate is 8ms
  32. Sleep();
  33.  
  34. return ;
  35. }
  36. //////////////////////////////////////////////////////////////////////////////////////
  37. enum MouseButtonType {
  38. BUTTON_LEFT, //鼠标左键
  39. BUTTON_RIGHT, //鼠标右键
  40. BUTTON_MID //鼠标中键(滚轮)
  41. };
  42.  
  43. enum MouseClickType {
  44. BUTTON_PRESS, //按键压下
  45. BUTTON_RELEASE, //按键抬起
  46. BUTTON_CLICK //按键点击(压下后抬起)
  47. };
  48.  
  49. int ClickMouse(MouseButtonType ButtonType, MouseClickType ClickType)
  50. {
  51. UINT ret;
  52. UINT count = ;
  53. INPUT input[] = { };
  54.  
  55. struct MouseOperArr {
  56. MouseButtonType button;
  57. struct MouseEvtFlg {
  58. UINT flgCnt;
  59. DWORD dwFlags[];
  60. }flags[];
  61. } MouseEvtArr[] = {
  62. { BUTTON_LEFT, { { , { MOUSEEVENTF_LEFTDOWN, } }, \
  63. {, { MOUSEEVENTF_LEFTUP, }}, {, { MOUSEEVENTF_LEFTDOWN, MOUSEEVENTF_LEFTUP } } } },
  64. { BUTTON_RIGHT, { { , { MOUSEEVENTF_RIGHTDOWN, } }, \
  65. {, { MOUSEEVENTF_RIGHTUP, }}, { , { MOUSEEVENTF_RIGHTDOWN, MOUSEEVENTF_RIGHTUP } } } },
  66. { BUTTON_MID, { { , { MOUSEEVENTF_MIDDLEDOWN, } }, \
  67. {, { MOUSEEVENTF_MIDDLEUP, }}, { ,{ MOUSEEVENTF_MIDDLEDOWN, MOUSEEVENTF_MIDDLEUP } } } }
  68. };
  69.  
  70. //common data
  71. input[].type = INPUT_MOUSE;
  72. input[].mi.time = ;//the system will provide time stamp
  73. input[].type = INPUT_MOUSE;
  74. input[].mi.time = ;//the system will provide time stamp
  75.  
  76. count = MouseEvtArr[ButtonType].flags[ClickType].flgCnt;
  77. input[].mi.dwFlags = MouseEvtArr[ButtonType].flags[ClickType].dwFlags[];
  78. input[].mi.dwFlags = MouseEvtArr[ButtonType].flags[ClickType].dwFlags[];
  79.  
  80. //send Mouse Event
  81. ret = SendInput(count, input, sizeof(INPUT));
  82. if (ret != count) {
  83. printf("SendInput failed, %ld\n", GetLastError());
  84. return -;
  85. }
  86.  
  87. //Assumes the mouse sampling rate is 8ms
  88. Sleep();
  89.  
  90. return ;
  91. }
  92.  
  93. #define HK_ALT_F1 (1001)
  94. #define HK_ALT_F2 (1002)
  95. #define HK_ALT_F3 (1003)
  96.  
  97. DWORD WINAPI ThreadEntry(LPVOID lpThreadParameter)
  98. {
  99. srand(time(NULL));
  100.  
  101. while () {
  102. //wait for message to startup
  103. WaitForSingleObject(ghMutex, INFINITE);
  104.  
  105. //压下左键不松手
  106. // ClickMouse(BUTTON_LEFT, BUTTON_PRESS);
  107.  
  108. int number = rand() % ;
  109. int dir = (number > ? : -);
  110. printf("Move\n");
  111. MoveMouse(dir * number, dir * number);
  112.  
  113. //release mutex for new message
  114. ReleaseMutex(ghMutex);
  115. Sleep();
  116. }
  117.  
  118. return ;
  119. }
  120.  
  121. int main(void)
  122. {
  123. //注册热键 Alt + F1,用于启动程序
  124. RegisterHotKey(NULL, HK_ALT_F1, MOD_ALT | MOD_NOREPEAT, VK_F1);
  125. //注册热键 Alt + F2,用于暂停程序
  126. RegisterHotKey(NULL, HK_ALT_F2, MOD_ALT | MOD_NOREPEAT, VK_F2);
  127. //注册热键 Alt + F2,用于退出程序
  128. RegisterHotKey(NULL, HK_ALT_F3, MOD_ALT | MOD_NOREPEAT, VK_F3);
  129.  
  130. ghMutex = CreateMutex(NULL, FALSE, NULL);
  131. WaitForSingleObject(ghMutex, INFINITE);
  132.  
  133. //创建工作线程
  134. HANDLE handle = CreateThread(NULL, , ThreadEntry, NULL, , NULL);
  135.  
  136. //主线程 用于接收热键消息
  137. MSG msg = { };
  138. while (GetMessage(&msg, NULL, , )) {
  139. switch (msg.message) {
  140. case WM_HOTKEY:
  141. switch (msg.wParam) {
  142. case HK_ALT_F1://接收到ALT + F1
  143. ReleaseMutex(ghMutex);
  144. break;
  145. case HK_ALT_F2://接收到ALT + F2
  146. WaitForSingleObject(ghMutex, INFINITE);
  147. break;
  148. case HK_ALT_F3:
  149. goto FINISH;
  150. break;
  151. default:
  152. break;
  153. }
  154. break;
  155. case WM_QUIT:
  156. case WM_CLOSE:
  157. goto FINISH;
  158. break;
  159. default:
  160. break;
  161.  
  162. }
  163. }
  164. FINISH:
  165. CloseHandle(ghMutex);
  166. UnregisterHotKey(NULL, HK_ALT_F1);
  167. UnregisterHotKey(NULL, HK_ALT_F2);
  168. UnregisterHotKey(NULL, HK_ALT_F3);
  169.  
  170. //close worker thread
  171. TerminateThread(handle, );
  172. WaitForSingleObject(handle, INFINITE);
  173. CloseHandle(handle);
  174.  
  175. return ;
  176. }

VS挂机移动鼠标代码的更多相关文章

  1. Listbox与dataGridView的获取鼠标点击事件的区别!!!

    lisxian.SelectedIndex = index; Listbox获取鼠标的代码!!!! DataGridViewRow currenRow = this.dgvxian3.Rows[ind ...

  2. c# WinForm英雄联盟挂机源码及实现原理

    主要功能:全自动化英雄联盟挂机,游戏中会在原地放技能保持不掉线状态,游戏结束自动重新开始,自动选择英雄,可以晚上挂机刷人机: 缺陷:没怎么完善,如果掉线或者游戏崩溃网络断了软件会自动停止操作,使用时间 ...

  3. winform界面特效470多例

    一共470多例winform 界面特效的源码. 实例030 窗口颜色的渐变 实例说明 在程序设计时,可以通过设置窗体的BackColor属性来改变窗口的背景颜色.但是这个属性改变后整个窗体的客户区都会 ...

  4. C#实例.net_经典例子400个

    一共470多例winform 界面特效的源码. 窗体与界面设计... 9 实例001  带历史信息的菜单    10 实例002  菜单动态合并    12 实例003  像开始菜单一样漂亮的菜单.. ...

  5. PHPstorm 的快捷键

    // ctrl+shift+n    查找文件//  ctrl+j            插入活动代码提示//  ctrl+alt+t        当前位置插入环绕代码//  alt+insert  ...

  6. STM32实现HID和u盘复合设备

      USB设备可以定义一个复合设备,复合设备分两种,一种是一个设备多个配置,还有一种是一个配置多个接口,在本例中采用一个配置多个接口的方式 首先修改设备描述符,标准设备描述符和报告描述符都不需要修改, ...

  7. USB自定义HID设备实现-LPC1768

    首先在之前鼠标的基础上修改设备描述符 #include "usbdesc.h" //usb标准设备描述符 const U8 USB_DeviceDescriptor[] = { U ...

  8. USB自定义HID设备实现-STM32

    该文档使用USB固件库,在其基础上进行了自己的定制,完成了一个USB-HID设备,首先是usb_desc.c文件,里面存放了usb各种描述符的存在 #include "usb_desc.h& ...

  9. lpc1768usb端点响应以及描述符定义

    #ifndef __USBEP1_H_ #define __USBEP1_H_ #include "usb.h" #include "usbhw.h" exte ...

随机推荐

  1. Jenkins安装后无法安装插件

    处理方法 Jenkins -- 管理插件 -- 高级 -- 升级站点 将URL 中的https 改为 http

  2. ES6.3.2 index操作源码流程

    ES 6.3.2 index 操作源码流程 client 发送请求 TransportBulkAction#doExecute(Task,BulkRequest,listener) 解析请求,是否要自 ...

  3. System系统类

    System系统类 : 主要的作用是用于获取系统的一个参数. System类需要掌握的方法: arraycopy(Object src, int srcPos, Object dest, int de ...

  4. DIV内文字两端对齐

    div{ text-align: justify; text-justify:inter-ideograph; }

  5. Flask框架搭建一个日程表

    目录 前言 项目介绍 技术栈 Flask Web开发流程 一.搭建环境 1.1: 创建虚拟环境 1.2: 安装依赖包 1.3: 创建依赖包列表文件 1.4: 测试hello word 二.应用程序开发 ...

  6. eclipse搭建elastic-job

    1.官网下载eclipse----面向Java EE企业级开发的Eclipse IDE for Java EE Developers:2.官网下载maven,并配置环境变量---MAVEN_HOME: ...

  7. word20170101厨房家电kitchen appliances

    1. Microwave Ovens 2. Electric Kettles 3. Coffeemakers 4. Espresso Machines 5. Toasters 6. Sandwich ...

  8. 最新传智播客web前端开发39期视频教程【完整版】

    本套视频为传智2018web前端开发全套视频教程基础班+就业班,视频+源码+案例笔记,全套高清不加密~2018最新传智播客视频! 本教程是实战派课程!为传智最新web前端39期,挑战全网最全视频,没有 ...

  9. Input子系统(二)【转】

    转自:http://blog.chinaunix.net/uid-25047042-id-4192368.html 上一篇中粗略的分析了下input_dev,input_handle,input_ha ...

  10. Python 并发编程

    进程 开启进程 from multiprocessing import Process import time def task(name): print('%s is running' %name) ...