LRESULT CALLBACK keyboardHookProc(int nCode, WPARAM wParam, LPARAM lParam){
PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT) lParam;
if (nCode==HC_ACTION){
if (wParam == WM_KEYDOWN){
switch (p->vkCode)
{
case VK_LBUTTON: cout << l++ << endl; break;
case VK_MBUTTON: cout << m++ << endl; break;
case VK_RBUTTON: cout << r++ << endl; break;
default: cout << keystroke++ << endl;;
}
}
}
return CallNextHookEx(NULL, nCode, wParam, lParam);
}

LRESULT CALLBACK mouseHookProc(int nCode, WPARAM wParam, LPARAM lParam){
PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT) lParam;
if (nCode==HC_ACTION){
switch (wParam){
case WM_LBUTTONDOWN: l++ << endl; break;
case WM_RBUTTONDOWN: r++ << endl; break;
}
}
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
HHOOK mouseHook = SetWindowsHookEx(WH_MOUSE_LL, (HOOKPROC)mouseHookProc, hInstance, 0);