|

9精币
HHOOK g_Hook返回;
const DWORD g_My消息ID=RegisterWindowMessageA("MyMsyCode");
//主线程回调函数
LRESULT CALLBACK Call_主线程回调函数(int nCode,WPARAM wParam,LPARAM lparam)
{
CWPSTRUCT *lpArg=(CWPSTRUCT*)lparam;//结构 hwnd message wParam lParam
if (nCode==HC_ACTION)//自己进程的消息
{
if (lpArg->hwnd==Call_获取窗口句柄()&&lpArg->message==g_My消息ID)//我们自己的消息
{
switch (lpArg->wParam)
{
T请求参数*请求;
T寻路参数*寻路;
case ID_发送请求:
Call_输出调试信息("幻想神域 主线程调用发包\r\n");
请求=(T请求参数*)lpArg->lParam;
Call_发送请求(请求->nd包长,请求->p包地址);
return 1;
break;
case ID_寻路:
Call_输出调试信息("幻想神域 主线程调用寻路\r\n");
寻路=(T寻路参数*)lpArg->lParam;
Call_寻路(寻路->X,寻路->Y);
return 1;
break;
}
}
}
return CallNextHookEx(g_Hook返回,nCode,wParam,lparam);
}
DWORD Call_Hook主线程()
{
HWND hGame=Call_获取窗口句柄();
DWORD ndThreadId=GetWindowThreadProcessId(hGame,NULL);
if(ndThreadId!=0)
{
g_Hook返回=SetWindowsHookEx(WH_CALLWNDPROC,Call_主线程回调函数,NULL,ndThreadId);
}
return 1;
}
//卸载主线程
DWORD Call_卸载Hook主线程()
{
UnhookWindowsHookEx(g_Hook返回);
return 1;
}
void Msg_发送明文包(DWORD 包长,DWORD 包地址)
{
T请求参数 请求;
请求.nd包长 = 包长;
请求.p包地址 = 包地址;
::SendMessageA(Call_获取窗口句柄(),g_My消息ID,ID_发送请求,(LPARAM)&请求);
}
void Msg_寻路(DWORD X,DWORD Y)
{
T寻路参数 寻路;
寻路.X = X;
寻路.Y = Y;
::SendMessageA(Call_获取窗口句柄(),g_My消息ID,ID_寻路,(LPARAM)&寻路);
}
|
|