Как отметил Ханс Пассант, вам нужна функция SetWindowsHookEx .
В ссылке подробно описаны все возможные хуки, а также функции хуков, которые нужно реализовать. Вот небольшой пример того, как установить глобальный хук, который будет обрабатывать сообщения после их обработки окном.
int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){
HHOOK msgHook = SetWindowsHookEx(WH_CALLWNDPROCRET, msgHook, hInstance, 0);
if(msgHook == NULL){
//Error handling here
cout << "Failed to set hook";
}
else{
//Hook has been set and will automatically be removed, when your application exits.
}
//A clean shutdown should always unhook everything it has installed
UnhookWindowsHookEx(msgHook);
return 0;
}
Вы можете посмотреть определение функции перехвата в MSDN, но это может выглядеть так:
LRESULT CallWndRetProc(int nCode, WPARAM wParam, LPARAM lParam){
CWPRETSTRUCT* theMessage = (CWPRETSTRUCT*)lParam;
//now you can read all message parameters and the return value
//...
//Always return by calling the next hook in the chain
return CallNextHookEx(0, nCode, wParam, lParam);
}
Другие хуки, которые вы хотите установить, следуют тому же принципу.
Смотри также