美服疯狂坦克辅助瞄准外挂C#版开发(二)全局鼠标键盘HOOK

大家都知道,Windows操作系统内部通讯是基于消息机制的。为了实现我们的功能,必须要能够截和处理获游戏中鼠标键盘事件的消息,常规做法是获取游戏窗体的句柄,然后加入HOOK,这样的好处是不会影响到其它正在运行的程序对鼠标键盘操作的响应。但是一般人在玩疯狂坦克的时候,应该不会同时运行Word之类的吧,也就是说,为了简单起见,我们在程序中加入的HOOK均为全局HOOK,注册到系统后会截获所有的键盘鼠标时间消息,而不管这个消息时由哪个程序激发,送往那个目标。

下面我们就用C#先写一个全局鼠标键盘HOOK库(部分代码及资料来源于CodeProject,具体URL找不到了,所以暂不列出):

HOOK抽象类 GlobalHook.cs

  1. using System;
  2. using System.Text;
  3. using System.Runtime.InteropServices;
  4. using System.Reflection;
  5. using System.Windows.Forms;
  6. namespace GlobalMouseKeyBoardHook
  7. {
  8.     /// <summary>
  9.     /// Abstract base class for Mouse and Keyboard hooks
  10.     /// </summary>
  11.     public abstract class GlobalHook
  12.     {
  13.         #region Windows API Code
  14.         [StructLayout(LayoutKind.Sequential)]
  15.         protected class POINT
  16.         {
  17.             public int x;
  18.             public int y;
  19.         }
  20.         [StructLayout(LayoutKind.Sequential)]
  21.         protected class MouseHookStruct
  22.         {
  23.             public POINT pt;
  24.             public int hwnd;
  25.             public int wHitTestCode;
  26.             public int dwExtraInfo;
  27.         }
  28.         [StructLayout(LayoutKind.Sequential)]
  29.         protected class MouseLLHookStruct
  30.         {
  31.             public POINT pt;
  32.             public int mouseData;
  33.             public int flags;
  34.             public int time;
  35.             public int dwExtraInfo;
  36.         }
  37.         [StructLayout(LayoutKind.Sequential)]
  38.         protected class KeyboardHookStruct
  39.         {
  40.             public int vkCode;
  41.             public int scanCode;
  42.             public int flags;
  43.             public int time;
  44.             public int dwExtraInfo;
  45.         }
  46.         /// <summary>
  47.         /// Extern Method:define Hook to Windows.
  48.         /// </summary>
  49.         /// <param name="idHook">Hook type,decide what message want to Hook</param>
  50.         /// <param name="lpfn">Function Pointer</param>
  51.         /// <param name="hMod">The dll or model include the Hook function</param>
  52.         /// <param name="dwThreadId">Correlative thread,if 0 means the global</param>
  53.         /// <returns>Hook id</returns>
  54.         [DllImport("user32.dll",CharSet = CharSet.Auto,CallingConvention = CallingConvention.StdCall,SetLastError = true)]
  55.         protected static extern int SetWindowsHookEx(int idHook,HookProc lpfn,IntPtr hMod,int dwThreadId);
  56.         /// <summary>
  57.         /// Extern Method:dispose the Hook.
  58.         /// </summary>
  59.         /// <param name="idHook">Hook id</param>
  60.         /// <returns>ture/false</returns>
  61.         [DllImport("user32.dll",CharSet = CharSet.Auto,CallingConvention = CallingConvention.StdCall,SetLastError = true)]
  62.         protected static extern bool UnhookWindowsHookEx(int idHook);
  63.         /// <summary>
  64.         /// Extern Method:call the next hook in the hook linked list
  65.         /// </summary>
  66.         /// <param name="idHook">this hook id</param>
  67.         /// <param name="nCode">the code contain the next hook need to do </param>
  68.         /// <param name="wParam">the parameters</param>
  69.         /// <param name="lParam">the parameters</param>
  70.         /// <returns>The value after the next hook finished.</returns>
  71.         [DllImport("user32.dll",CharSet = CharSet.Auto,CallingConvention = CallingConvention.StdCall)]
  72.         protected static extern int CallNextHookEx(int idHook,int nCode,int wParam,IntPtr lParam);
  73.         /// <summary>
  74.         /// Extern Method:transfer the virtual keycode and keyboard state to ascii string.
  75.         /// </summary>
  76.         /// <param name="uVirtKey">the virtual keycode need to transfer</param>
  77.         /// <param name="uScanCode">set the uVirtKey's transfer code</param>
  78.         /// <param name="lpbKeyState">256 length array to show all key's state in the keyboard</param>
  79.         /// <param name="lpwTransKey">the buffer of the transfer result</param>
  80.         /// <param name="fuState">define a menu is actived</param>
  81.         /// <returns>int</returns>
  82.         [DllImport("user32")]
  83.         protected static extern int ToAscii(int uVirtKey,int uScanCode,byte[] lpbKeyState,byte[] lpwTransKey,int fuState);
  84.         /// <summary>
  85.         /// Copy the 256 virtual key to he buffer
  86.         /// </summary>
  87.         /// <param name="pbKeyState">256 length array to show all key's state in the keyboard</param>
  88.         /// <returns>0</returns>
  89.         [DllImport("user32")]
  90.         protected static extern int GetKeyboardState(byte[] pbKeyState);
  91.         /// <summary>
  92.         /// get a virtual key's state
  93.         /// </summary>
  94.         /// <param name="vKey">a virtual key</param>
  95.         /// <returns>state</returns>
  96.         [DllImport("user32.dll",CharSet = CharSet.Auto,CallingConvention = CallingConvention.StdCall)]
  97.         protected static extern short GetKeyState(int vKey);
  98.         protected delegate int HookProc(int nCode,int wParam,IntPtr lParam);
  99.         protected const int WH_MOUSE_LL = 14;
  100.         protected const int WH_KEYBOARD_LL = 13;
  101.         protected const int WH_MOUSE = 7;
  102.         protected const int WH_KEYBOARD = 2;
  103.         protected const int WM_MOUSEMOVE = 0x200;
  104.         protected const int WM_LBUTTONDOWN = 0x201;
  105.         protected const int WM_RBUTTONDOWN = 0x204;
  106.         protected const int WM_MBUTTONDOWN = 0x207;
  107.         protected const int WM_LBUTTONUP = 0x202;
  108.         protected const int WM_RBUTTONUP = 0x205;
  109.         protected const int WM_MBUTTONUP = 0x208;
  110.         protected const int WM_LBUTTONDBLCLK = 0x203;
  111.         protected const int WM_RBUTTONDBLCLK = 0x206;
  112.         protected const int WM_MBUTTONDBLCLK = 0x209;
  113.         protected const int WM_MOUSEWHEEL = 0x020A;
  114.         protected const int WM_KEYDOWN = 0x100;
  115.         protected const int WM_KEYUP = 0x101;
  116.         protected const int WM_SYSKEYDOWN = 0x104;
  117.         protected const int WM_SYSKEYUP = 0x105;
  118.         protected const byte VK_SHIFT = 0x10;
  119.         protected const byte VK_CAPITAL = 0x14;
  120.         protected const byte VK_NUMLOCK = 0x90;
  121.         protected const byte VK_LSHIFT = 0xA0;</
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值