#include <time.h>
#include <stdio.h>
#include <Windows.h> HANDLE ghMutex; ///////////////////////////////////////////////////////////////////////////////////
/* 移动鼠标的位置(相对)
* the amount of motion since the last mouse event was generated
* @dx : relative x coordinate is specified as the number of pixels moved
* @dy : relative y coordinate is specified as the number of pixels moved
*/
int MoveMouse(LONG dx, LONG dy)
{
UINT ret;
INPUT input = { }; input.type = INPUT_MOUSE;
input.mi.time = ;//the system will provide time stamp
input.mi.dwFlags = MOUSEEVENTF_MOVE; //Movement occurred.
input.mi.dx = dx;
input.mi.dy = dy; //send Mouse Event
ret = SendInput(, &input, sizeof(INPUT));
if (ret != ) {
printf("SendInput failed, %ld\n", GetLastError());
return -;
} //Assumes the mouse sampling rate is 8ms
Sleep(); return ;
}
//////////////////////////////////////////////////////////////////////////////////////
enum MouseButtonType {
BUTTON_LEFT, //鼠标左键
BUTTON_RIGHT, //鼠标右键
BUTTON_MID //鼠标中键(滚轮)
}; enum MouseClickType {
BUTTON_PRESS, //按键压下
BUTTON_RELEASE, //按键抬起
BUTTON_CLICK //按键点击(压下后抬起)
}; int ClickMouse(MouseButtonType ButtonType, MouseClickType ClickType)
{
UINT ret;
UINT count = ;
INPUT input[] = { }; struct MouseOperArr {
MouseButtonType button;
struct MouseEvtFlg {
UINT flgCnt;
DWORD dwFlags[];
}flags[];
} MouseEvtArr[] = {
{ BUTTON_LEFT, { { , { MOUSEEVENTF_LEFTDOWN, } }, \
{, { MOUSEEVENTF_LEFTUP, }}, {, { MOUSEEVENTF_LEFTDOWN, MOUSEEVENTF_LEFTUP } } } },
{ BUTTON_RIGHT, { { , { MOUSEEVENTF_RIGHTDOWN, } }, \
{, { MOUSEEVENTF_RIGHTUP, }}, { , { MOUSEEVENTF_RIGHTDOWN, MOUSEEVENTF_RIGHTUP } } } },
{ BUTTON_MID, { { , { MOUSEEVENTF_MIDDLEDOWN, } }, \
{, { MOUSEEVENTF_MIDDLEUP, }}, { ,{ MOUSEEVENTF_MIDDLEDOWN, MOUSEEVENTF_MIDDLEUP } } } }
}; //common data
input[].type = INPUT_MOUSE;
input[].mi.time = ;//the system will provide time stamp
input[].type = INPUT_MOUSE;
input[].mi.time = ;//the system will provide time stamp count = MouseEvtArr[ButtonType].flags[ClickType].flgCnt;
input[].mi.dwFlags = MouseEvtArr[ButtonType].flags[ClickType].dwFlags[];
input[].mi.dwFlags = MouseEvtArr[ButtonType].flags[ClickType].dwFlags[]; //send Mouse Event
ret = SendInput(count, input, sizeof(INPUT));
if (ret != count) {
printf("SendInput failed, %ld\n", GetLastError());
return -;
} //Assumes the mouse sampling rate is 8ms
Sleep(); return ;
} #define HK_ALT_F1 (1001)
#define HK_ALT_F2 (1002)
#define HK_ALT_F3 (1003) DWORD WINAPI ThreadEntry(LPVOID lpThreadParameter)
{
srand(time(NULL)); while () {
//wait for message to startup
WaitForSingleObject(ghMutex, INFINITE); //压下左键不松手
// ClickMouse(BUTTON_LEFT, BUTTON_PRESS); int number = rand() % ;
int dir = (number > ? : -);
printf("Move\n");
MoveMouse(dir * number, dir * number); //release mutex for new message
ReleaseMutex(ghMutex);
Sleep();
} return ;
} int main(void)
{
//注册热键 Alt + F1,用于启动程序
RegisterHotKey(NULL, HK_ALT_F1, MOD_ALT | MOD_NOREPEAT, VK_F1);
//注册热键 Alt + F2,用于暂停程序
RegisterHotKey(NULL, HK_ALT_F2, MOD_ALT | MOD_NOREPEAT, VK_F2);
//注册热键 Alt + F2,用于退出程序
RegisterHotKey(NULL, HK_ALT_F3, MOD_ALT | MOD_NOREPEAT, VK_F3); ghMutex = CreateMutex(NULL, FALSE, NULL);
WaitForSingleObject(ghMutex, INFINITE); //创建工作线程
HANDLE handle = CreateThread(NULL, , ThreadEntry, NULL, , NULL); //主线程 用于接收热键消息
MSG msg = { };
while (GetMessage(&msg, NULL, , )) {
switch (msg.message) {
case WM_HOTKEY:
switch (msg.wParam) {
case HK_ALT_F1://接收到ALT + F1
ReleaseMutex(ghMutex);
break;
case HK_ALT_F2://接收到ALT + F2
WaitForSingleObject(ghMutex, INFINITE);
break;
case HK_ALT_F3:
goto FINISH;
break;
default:
break;
}
break;
case WM_QUIT:
case WM_CLOSE:
goto FINISH;
break;
default:
break; }
}
FINISH:
CloseHandle(ghMutex);
UnregisterHotKey(NULL, HK_ALT_F1);
UnregisterHotKey(NULL, HK_ALT_F2);
UnregisterHotKey(NULL, HK_ALT_F3); //close worker thread
TerminateThread(handle, );
WaitForSingleObject(handle, INFINITE);
CloseHandle(handle); return ;
}

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. Kubernetes之canal的网络策略(NetworkPolicy)

    安装要求: 1.我们这里安装的是3.3的版本.kubernetes的要求: 支持的版本 1.10 1.11 1.12 2.CNI插件需要启用,Calico安装为CNI插件.必须通过传递--networ ...

  2. MySQL巧建sum索引帮我们提高至少100%的效率

    有两个表,表a CREATE TABLE `a` ( `id` mediumint() unsigned NOT NULL AUTO_INCREMENT, `fid` ) unsigned ', `c ...

  3. Java 集合系列08之 List总结

    一.List概述 1. List是一个接口,它继承于Collection接口,代表有序集合 2. ArrayList, LinkedList, Vector, Stack是List的4个实现类. Ar ...

  4. 【bzoj 4833】[Lydsy1704月赛]最小公倍佩尔数

    Description 令 $(1+\sqrt 2)^n=e(n)+\sqrt 2\cdot f(n)$ ,其中 $e(n),f(n)$ 都是整数,显然有 $(1-\sqrt 2)^n=e(n)-\s ...

  5. 生成唯一UUID

    目前有多种方式生成的UUID,根据算法,可确定是否唯一,使用IP和MAC自定义生成唯一主键较妥: // 获取MAC地址的方法 private static String getMACAddress(I ...

  6. (Linux)初探cmake .和make命令

    cmake编译OpenCV工程 首先我们看到文件夹中有一cpp文件,CMakeLists.txt文件和一张图片 首先进行cmake .命令 接着进行make命令 . 然后就得到了可执行文件,也就是说可 ...

  7. 2018-2019-2 20165325《网络对抗技术》Exp0 Kali安装 Week1

    2018-2019-2 20165325<网络对抗技术>Exp0 Kali安装 Week1 一.安装kali VMware上学期已经有了,主要是下载Kali-Linux-2019.1-vm ...

  8. Spring 基于注解的AOP实现

    在本文开始之前,我要引入一张图,这张图的来源 https://blog.csdn.net/chenyao1994/article/details/79708496 ,版权归原作者所有,我借鉴了原作者的 ...

  9. hihocoder 1176

    hihocoder 1176 题意:N,M.分别表示岛屿数量和木桥数量,一笔画 分析:欧拉路问题(给定无孤立结点图G,若存在一条路,经过图中每边一次且仅一次,该条路称为欧拉路) 欧拉路的条件 一个无向 ...

  10. 解决tcp粘包问题

    目录 什么是粘包(演示粘包现象) 解决粘包 实际应用 什么是粘包 首先只有tcp有粘包现象,udp没有粘包 socket收发消息的原理 发送端可以是一K一K地发送数据,而接收端的应用程序可以两K两K地 ...