SetWindowsHookEx 成功但从未调用回调函数
SetWindowsHookEx succeed but callback function is never called
dll代码:
LRESULT CALLBACK CBTNewProc(int nCode, WPARAM wParam, LPARAM lParam)
{
std::ofstream file;
file.open("E:\enter.txt", std::ios::out);
file << nCode;
file.close();
return CallNextHookEx(g_hHook, nCode, wParam, lParam);
}
extern "C" __declspec(dllexport) void installHook()
{
if (g_hHook != NULL){
UnhookWindowsHookEx(g_hHook);
g_hHook = NULL;
}
HINSTANCE hInstance = GetModuleHandle(NULL);
g_hHook = SetWindowsHookEx(WH_CBT, CBTNewProc, NULL, GetCurrentThreadId());
if (g_hHook == NULL)
{
MessageBox(NULL, L"fail!", L"caption", MB_OK);
}
else
{
MessageBox(NULL, L"install success!", L"caption", MB_OK);
}
}
我写了另一个程序来加载这个 dll 并调用了 installHook
。显示消息框 "install success" 但从未调用回调函数,enter.txt 在驱动器 E 下找不到。
我正在使用 Win7 + VS2013。
要在其他进程中设置钩子,必须将包含钩子过程的DLL的hInstance传递给SetWindowsHookEx
。
您还应该传递零作为线程 ID。
dll代码:
LRESULT CALLBACK CBTNewProc(int nCode, WPARAM wParam, LPARAM lParam)
{
std::ofstream file;
file.open("E:\enter.txt", std::ios::out);
file << nCode;
file.close();
return CallNextHookEx(g_hHook, nCode, wParam, lParam);
}
extern "C" __declspec(dllexport) void installHook()
{
if (g_hHook != NULL){
UnhookWindowsHookEx(g_hHook);
g_hHook = NULL;
}
HINSTANCE hInstance = GetModuleHandle(NULL);
g_hHook = SetWindowsHookEx(WH_CBT, CBTNewProc, NULL, GetCurrentThreadId());
if (g_hHook == NULL)
{
MessageBox(NULL, L"fail!", L"caption", MB_OK);
}
else
{
MessageBox(NULL, L"install success!", L"caption", MB_OK);
}
}
我写了另一个程序来加载这个 dll 并调用了 installHook
。显示消息框 "install success" 但从未调用回调函数,enter.txt 在驱动器 E 下找不到。
我正在使用 Win7 + VS2013。
要在其他进程中设置钩子,必须将包含钩子过程的DLL的hInstance传递给SetWindowsHookEx
。
您还应该传递零作为线程 ID。