这就是我初始化钩子的方式
if (MH_CreateHookApiEx(L"user32", "SetWindowLongW", &MySetWindowLongW, (LPVOID*)&oSetWindowLongW, nullptr) != MH_OK)
{
std::cout << "MHook Fail To Install Hook." << std::endl;
goto exit;
}
if (MH_EnableHook(&SetWindowLongW) != MH_OK)
{
std::cout << "MHook Fail To Enable Hook." << std::endl;
goto exit;
}typedef LONG(WINAPI* _MySetWindowLongW)(HWND, int, LONG);
_MySetWindowLongW oSetWindowLongW = nullptr;
LONG MySetWindowLongW(
HWND hWnd,
int nIndex,
LONG dwNewLong
)
{
return oSetWindowLongW(hWnd, nIndex, dwNewLong);
}钩子工作了,但问题是在Visual Studio中第一次执行MySetWindowLongW之后,在函数完成后我得到了has triggered a breakpoint.。
我想这是Stack或者是通话对话。我真的不知道。
但是我用CreateWindowExW试过了,这是正常的。这个问题只与SetWindowLongW有关。
发布于 2020-01-30 04:46:13
我不熟悉MinHook,但我了解它的功能。这里有几个暗中猜测:
将MySetWindowLongW作为绕道函数传递给MH_CreateHookEx,而不是&MySetWindowLongW。这可能会也可能不会有什么不同。这就是:
if (MH_CreateHookApiEx(L"user32", "SetWindowLongW", MySetWindowLongW, (LPVOID*)&oSetWindowLongW, nullptr) != MH_OK)声明您的钩子函数并将其定义为stdcall,以与您所挂接的函数的调用约定保持一致
extern "C" LONG WINAPI MySetWindowLongW(
HWND hWnd,
int nIndex,
LONG dwNewLong) {...}https://stackoverflow.com/questions/59974972
复制相似问题