阅读:2668回复:2
虚拟鼠标驱动
网络游戏出于对控制输入速度的和反外挂的目的,对于鼠标键盘的输入越过了消息传递等正常的途径层
次,所以一般的常用如下控制鼠标键盘的API函数 ::SetCursorPos(pEvent->xPos, pEvent->yPos); ::SendInput(1, &Input, sizeof(INPUT)); ::PostMessage(hwnd,WM_KEYDOWN, VK_ESC ,0L); //发送ESC按下的键盘消息 是无法实现目的的,解决问题的方法只有越过应用层面,从系统驱动层解决问题,目前的方法主要有 1.分别写个鼠标和键盘驱动设备,但在在系统设备管理器中出现一个鼠标和一个键盘设备 2.用winio软件包直接控制鼠标键盘硬件端口,这种方法要求本身的硬件鼠标不可以动,否则就鼠标满天 飞,只有重启电脑了 结合外挂的特点和以上方法优缺点,本人在底层修改window底层驱动,鼠标键盘驱动合二为一可以同时 控制鼠标键盘,可以打开和关闭屏蔽物理鼠标,可以过滤键盘信息,并且在系统设备管理器中也看不到 设备显示,即隐蔽又高效,有需要的朋友可以联系, 该驱动为自己开发外挂而制作,当时也考虑购买但是没有人卖,无法买到,所以今天提供给大家, 该驱动完全为外挂的高要求而制作测试使用验证成熟,可以玩转鼠标键盘摆脱API函数的限制,做出 各种复杂的鼠标键盘动作,明白人一看下面的鼠标键盘控制数据结构就明白了。。总之windows APi可以干的事情,它都可以干,它可以做的动作windows APi就不行了 电话13570275475,qq76838567 (验证信息请注明” 鼠标“) 控制接口如下: typedef struct MOUSE_INPUT_DATA { USHORT UnitId; USHORT Flags; union { ULONG Buttons; struct { USHORT ButtonFlags; USHORT ButtonData; }; }; ULONG RawButtons; LONG LastX; LONG LastY; ULONG ExtraInformation; } MOUSE_INPUT_DATA, *PMOUSE_INPUT_DATA; typedef struct _KEYBOARD_INPUT_DATA { USHORT UnitId; USHORT MakeCode; USHORT Flags; USHORT Reserved; ULONG ExtraInformation; } KEYBOARD_INPUT_DATA, *PKEYBOARD_INPUT_DATA; long Move_Ext(long x, long y) { MOUSE_INPUT_DATA INPUT_DATA ; UCHAR OutputBuffer[10]; DWORD dwOutput; BOOL bRet; if (hDevice == INVALID_HANDLE_VALUE) return 0; memset(&INPUT_DATA,0,sizeof(MOUSE_INPUT_DATA)); INPUT_DATA.Flags=MOUSE_MOVE_RELATIVE; INPUT_DATA.LastX=x; INPUT_DATA.LastY=y; bRet = DeviceIoControl(hDevice, IOCTL_Mouse, (char*)&INPUT_DATA, sizeof(MOUSE_INPUT_DATA), &OutputBuffer, 10, &dwOutput, NULL); return bRet; } long Click_EXT(char Action) { MOUSE_INPUT_DATA INPUT_DATA ; UCHAR OutputBuffer[10]; DWORD dwOutput; BOOL bRet; if (hDevice == INVALID_HANDLE_VALUE) return 0; memset(&INPUT_DATA,0,sizeof(MOUSE_INPUT_DATA)); INPUT_DATA.Flags=MOUSE_MOVE_RELATIVE; INPUT_DATA.ButtonFlags=Action; bRet = DeviceIoControl(hDevice, IOCTL_Mouse, (char*)&INPUT_DATA, sizeof(MOUSE_INPUT_DATA), &OutputBuffer, 10, &dwOutput, NULL); return bRet; } long KeyBoard(long MakeCode, long Flags) { KEYBOARD_INPUT_DATA INPUT_DATA ; UCHAR OutputBuffer[10]; DWORD dwOutput; BOOL bRet; if (hDevice == INVALID_HANDLE_VALUE) return 0; memset(&INPUT_DATA,0,sizeof(KEYBOARD_INPUT_DATA)); INPUT_DATA.Flags=Flags; INPUT_DATA.MakeCode=MakeCode; bRet = DeviceIoControl(hDevice, IOCTL_KeyBoard, (char*)&INPUT_DATA, sizeof(KEYBOARD_INPUT_DATA), &OutputBuffer, 10, &dwOutput, NULL); return bRet; } // 扫描码 #define VKK_ESC 0x011b //ESC #define VKK_F1 0x3b00 //F1 #define VKK_F2 0x3c00 //F2 #define VKK_F3 0x3d00 //F3 #define VKK_F4 0x3e00 //F4 #define VKK_F5 0x3f00 //F5 #define VKK_F6 0x4000 //F6 #define VKK_F7 0x4100 //F7 #define VKK_F8 0x4200 //F8 #define VKK_F9 0x4300 //F9 #define VKK_F10 0x4400 //F10 #define VKK_~ 0x2960 //~ #define VKK_1 0x0231 //1 #define VKK_2 0x0332 //2 #define VKK_3 0x0433 //3 #define VKK_4 0x0534 //4 #define VKK_5 0x0635 //5 #define VKK_6 0x0736 //6 #define VKK_7 0x0837 //7 #define VKK_8 0x0938 //8 #define VKK_9 0x0a39 //9 #define VKK_0 0x0b30 //0 #define VKK_- 0x0c2d //- #define VKK_= 0x0d3d //= #define VKK_\ 0x2b5c //\ #define VKK_BackSpace 0x0e08 //退格键 #define VKK_Tab 0x0f09 //Tab #define VKK_q 0x1071 //q #define VKK_w 0x1177 //w #define VKK_e 0x1265 //e #define VKK_r 0x1372 //r #define VKK_t 0x1474 //t #define VKK_y 0x1579 //y #define VKK_u 0x1675 //u #define VKK_i 0x1769 //i #define VKK_o 0x186f //o #define VKK_p 0x1970 //p #define VKK_[ 0x1a5b //[ #define VKK_] 0x1b5d //] #define VKK_a 0x1e61 //a #define VKK_s 0x1f73 //s #define VKK_d 0x2064 //d #define VKK_f 0x2166 //f #define VKK_g 0x2267 //g #define VKK_h 0x2368 //h #define VKK_j 0x246a //j #define VKK_k 0x256b //k #define VKK_l 0x266c //l #define VKK_; 0x273b //; #define VKK_' 0x2827 //' #define VKK_Enter 0x1c0d //回车 #define VKK_z 0x2c7a //z #define VKK_x 0x2d78 //x #define VKK_c 0x2e63 //c #define VKK_v 0x2f76 //v #define VKK_b 0x3062 //b #define VKK_n 0x316e //n #define VKK_m 0x326d //m #define VKK_ 0x332c // #define VKK_. 0x342e //. #define VKK_/ 0x352f /// #define VKK_空格键 0x3920 //空格键 #define VKK_Insert 0x5200 //Insert #define VKK_Home 0x4700 //Home #define VKK_Page UP 0x4900 //Page UP #define VKK_Delete 0x5300 //Delete #define VKK_End 0x4f00 //End #define VKK_PageDown 0x5100 //PageDown #define VKK_上箭头 0x4800 //上箭头 #define VKK_左箭头 0x4b00 //左箭头 #define VKK_下箭头 0x5000 //下箭头 #define VKK_右箭头 0x4d00 //右箭头 #define VKK_/ 0x352f /// #define VKK_* 0x372a //* #define VKK_- (注意 0x4a2d //- (注意 #define VKK_7 0x4737 //7 #define VKK_8 0x4838 //8 #define VKK_9 0x4939 //9 #define VKK_4 0x4b34 //4 #define VKK_5 0x4c35 //5 #define VKK_6 0x4d36 //6 #define VKK_+ 0x4e2b //+ #define VKK_1 0x4f31 //1 #define VKK_2 0x5032 //2 #define VKK_3 0x5133 //3 #define VKK_0 0x5230 //0 #define VKK_Del 0x532e //De |
|
沙发#
发布于:2009-03-05 09:32
垃圾东西也想骗钱,系统本身提供了驱动,加个过滤驱动就行,骗子!!
|
|
板凳#
发布于:2009-03-06 21:32
ttccgg,老弟也给楼主留点面子嘛
这年头挣点钱不容易呀 |
|
|