knight19931997
驱动牛犊
驱动牛犊
  • 注册日期2002-06-16
  • 最后登录2009-02-11
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2668回复:2

虚拟鼠标驱动

楼主#
更多 发布于:2009-02-09 07:10
网络游戏出于对控制输入速度的和反外挂的目的,对于鼠标键盘的输入越过了消息传递等正常的途径层
次,所以一般的常用如下控制鼠标键盘的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
ttccgg
驱动牛犊
驱动牛犊
  • 注册日期2003-10-22
  • 最后登录2009-04-27
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望31点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-03-05 09:32
垃圾东西也想骗钱,系统本身提供了驱动,加个过滤驱动就行,骗子!!
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2009-03-06 21:32
ttccgg,老弟也给楼主留点面子嘛
这年头挣点钱不容易呀
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
游客

返回顶部