WEB开发网
开发学院软件开发C语言 C#简单游戏外挂制作(以Warcraft Ⅲ为例) 阅读

C#简单游戏外挂制作(以Warcraft Ⅲ为例)

 2009-07-03 07:07:28 来源:WEB开发网   
核心提示: 二、使用Windows API设置钩子 有了以上windows API函数的声明,下一步就是设置钩子了,C#简单游戏外挂制作(以Warcraft Ⅲ为例)(3), 寥寥两行代码,但包含了相当丰富的内容,我们定义了一个处理键盘消息函数的委托KeyBoardHookProcedure = n

二、使用Windows API设置钩子  

有了以上windows API函数的声明,下一步就是设置钩子了。

寥寥两行代码,但包含了相当丰富的内容。

//委托
public delegate int HookProc(int nCode, IntPtr wParam, IntPtr lParam);

 

public void Hook_Start()
  {
    // 安装键盘钩子
    if (hHook == 0)
    {
      KeyBoardHookProcedure = new HookProc(KeyBoardHookProc);

      hHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyBoardHookProcedure, GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), 0);
           
    }
  }

 

  先介绍一下设置钩子的明星函数:SetWindowsHookEx 。它的参数说明如下。

SetWindowsHookEx(

idHook: Integer;   {钩子类型}

lpfn: TFNHookProc; {函数指针}

hmod: HINST;       {包含钩子函数的模块(EXE、DLL)句柄; 一般是 HInstance; 如果是当前线程这里可以是 0}

dwThreadId: DWORD  {关联的线程; 可用 GetCurrentThreadId 获取当前线程; 0 表示是系统级钩子}

): HHOOK;            {返回钩子的句柄; 0 表示失败}

请注意lpfn这个参数。上面的解释是“函数指针”。在C#中,是不能直接使用指针的,更不要说函数指针了。我们可以采用C#中的委托(delegate)来实现函数指针的功能。

于是乎,在上面的代码中,我们定义了一个处理键盘消息函数的委托KeyBoardHookProcedure = new HookProc(KeyBoardHookProc),并将它作为参数传入SetWindowsHookEx 内。KeyBoardHookProc就是被委托的具体函数。

上一页  1 2 3 4  下一页

Tags:简单 游戏外挂 制作

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接