CHAR szBuff[
100
]
=
{
0
};
HHOOK g_hHook
=
NULL;
/
/
钩子回调函数
LRESULT MessageProc(
int
nCode,
WPARAM wParam,
LPARAM lParam);
DWORD GetWindowThreadID(LPSTR lpszWindowName)
{
/
/
初始化
HANDLE hProcess;
HANDLE hThreadSnap
=
NULL;
/
/
模块快照
DWORD th32ThreadID
=
0
;
DWORD dwPid
=
0x00
;
THREADENTRY32 thread32
=
{
0
};
BOOL
bMoreOfThread;
/
/
获取进程句柄
HWND hwnd
=
FindWindow(NULL, lpszWindowName);
if
(!hwnd)
{
return
FALSE;
}
GetWindowThreadProcessId(hwnd, &dwPid);
hProcess
=
OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPid);
/
/
获取线程
ID
thread32.dwSize
=
sizeof(thread32);
hThreadSnap
=
CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,
0
);
if
(hThreadSnap
=
=
INVALID_HANDLE_VALUE)
{
return
FALSE;
}
bMoreOfThread
=
Thread32First(hThreadSnap, &thread32);
while
(bMoreOfThread)
{
if
(thread32.th32OwnerProcessID
=
=
dwPid)
{
th32ThreadID
=
thread32.th32ThreadID;
break
;
}
bMoreOfThread
=
Thread32Next(hThreadSnap, &thread32);
}
CloseHandle(hThreadSnap);
return
th32ThreadID;
}
/
/
设置全局钩子
BOOL
SetGlobalHook(
int
idHook, LPSTR lpszWindowName)
{
DWORD threadID
=
GetWindowThreadID(lpszWindowName);
if
(!threadID)
{
return
FALSE;
}
g_hHook
=
SetWindowsHookEx(idHook, (HOOKPROC)MessageProc, GetModuleHandle(
"TestDll"
), threadID);
if
(NULL
=
=
g_hHook)
{
return
FALSE;
}
return
TRUE;
}
/
/
卸载钩子
BOOL
UnsetGlobalHook()
{
if
(g_hHook)
{
UnhookWindowsHookEx(g_hHook);
return
TRUE;
}
else
return
FALSE;
}
/
/
钩子回调函数
LRESULT MessageProc(
int
nCode,
WPARAM wParam,
LPARAM lParam)
{
if
(nCode
=
=
HC_ACTION)
{
PCWPSTRUCT pcw
=
(PCWPSTRUCT)lParam;
if
(pcw
-
>message
=
=
WM_USER
+
1
)
{
MessageBox(
0
,
0
,
0
,
0
);
}
}
return
CallNextHookEx(g_hHook, nCode, wParam, lParam);
}