網上有很多外掛制作的教程
作為微軟
其實作為游戲外掛來說
Warcraft Ⅲ
本文制作DOTA游戲中的顯血
最終界面如下
本示例包含兩個功能
首先簡單介紹一下
外掛程序與游戲程序是兩個不同的進程
了解了這個過程之後
一
//鍵盤Hook結構函數
[StructLayout(LayoutKind
public class KeyBoardHookStruct
{
public int vkCode;
public int scanCode;
public int flags;
public int time;
public int dwExtraInfo;
}
#region DllImport
//設置鉤子
[DllImport(
public static extern int SetWindowsHookEx(int idHook
[DllImport(
//抽掉鉤子
public static extern bool UnhookWindowsHookEx(int idHook);
[DllImport(
//調用下一個鉤子
public static extern int CallNextHookEx(int idHook
//取得模塊句柄
[DllImport(
private static extern IntPtr GetModuleHandle(string lpModuleName);
//尋找目標進程窗口
[DllImport(
public static extern IntPtr FindWindow(string lpClassName
string lpWindowName);
//設置進程窗口到最前
[DllImport(
public static extern bool SetForegroundWindow(IntPtr hWnd);
//模擬鍵盤事件
[DllImport(
public static extern void keybd_event(Byte bVk
//釋放按鍵的常量
private const int KEYEVENTF_KEYUP =
本例所使用的函數比較少
這些函數的命名規范合理
如果讀者對於其中的某些函數不熟悉
二
有了以上windows API函數的聲明
寥寥兩行代碼
//委托
public delegate int HookProc(int nCode
public void Hook_Start()
{
// 安裝鍵盤鉤子
if (hHook ==
{
KeyBoardHookProcedure = new HookProc(KeyBoardHookProc);
hHook = SetWindowsHookEx(WH_KEYBOARD_LL
}
}
先介紹一下設置鉤子的明星函數
SetWindowsHookEx(
idHook
lpfn
hmod
dwThreadId
)
請注意lpfn這個參數
於是乎
三
設置好鉤子後
public static int KeyBoardHookProc(int nCode
{
//監控用戶鍵盤輸入
KeyBoardHookStruct input = (KeyBoardHookStruct)Marshal
//截獲Home 鍵
if (input
{
//此處寫入其他操作邏輯
}
// 繼續執行下一個鉤子程序
return CallNextHookEx(hHook
}
四
顯血功能
//獲得魔獸程序的句柄
IntPtr wcHandle = FindWindow(null
//如果鉤子有效
if (wcHandle != IntPtr
{
//設置游戲窗口到最前
SetForegroundWindow(wcHandle);
byte VK_NUM
byte VK_NUM
keybd_event(VK_NUM
keybd_event(VK_NUM
}
改鍵
//如果用戶按了Q鍵
if (input
{
//獲得魔獸程序的句柄
IntPtr wcHandle = FindWindow(null
//如果鉤子有效
if (wcHandle != IntPtr
{
//設置游戲窗口到最前
SetForegroundWindow(wcHandle);
byte VK_Q = (byte)Keys
keybd_event(VK_Q
keybd_event(VK_Q
}
return
}
好了
From:http://tw.wingwit.com/Article/program/net/201311/12753.html