1,SetWindowsHookEx介绍
请移步官网:https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwindowshookexa
2,发现问题
HHOOK hHook = NULL;
#define CURRENT_MOUDLE_NAME L"你的dll name"
//hook callback 方法
LRESULT CALLBACK WndManager::HookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
return CallNextHookEx(hHook , nCode, wParam, lParam);
}
int main()
{
auto dllHwnd = GetModuleHandle(CURRENT_MOUDLE_NAME);
{
//注册
//正常,dll没有注入其它进程的方式
hHook = SetWindowsHookEx(WH_CALLWNDPROC, HookProc, dllHwnd, GetCurrentThreadId());
}
{
//注册
//会注入到莫名其妙进程的情况
hHook = SetWindowsHookEx(WH_CALLWNDPROC, HookProc, dllHwnd, 0);
}
//取消注册
if(hHook)
{
UnhookWindowsHookEx(hHook);
}
}
3,原因
就是因为最后一个参数没有设置,导致它变成了全局挂钩导致的(如果觉得不对请务必指出来)