Примерно такой же пример с использованием обратного вызова должен работать:
#include <iostream>
#include <windows.h>
using namespace std;
HHOOK _hook;
LRESULT _stdcall HookCallback(int nCode, WPARAM wParam, LPARAM lParam)
{
if (wParam == WM_LBUTTONDOWN)
{
cout << "mouse down" << endl;
}
return CallNextHookEx(_hook, nCode, wParam, lParam);
}
void SetHook() {
if (!(_hook = SetWindowsHookEx(WH_MOUSE_LL, HookCallback, NULL, 0)))
{
MessageBox(NULL, "Failed to install hook!", "Error",MB_ICONERROR);
}
}
void ReleaseHook() {
UnhookWindowsHookEx(_hook);
}
int main() {
SetHook();
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
}
return 0;
}