Я выйду на передний план, предполагая, что вы работаете в Windows и хотите захватить глобальные нажатия клавиш. Способ сделать это - использовать LowLevelHooks. Посмотрите на следующий пример:
Определите эту функцию обратного вызова где-нибудь в вашем коде:
//The function that implements the key logging functionality
LRESULT CALLBACK LowLevelKeyboardProc( int nCode, WPARAM wParam, LPARAM lParam )
{
char pressedKey;
// Declare a pointer to the KBDLLHOOKSTRUCTdsad
KBDLLHOOKSTRUCT *pKeyBoard = (KBDLLHOOKSTRUCT *)lParam;
switch( wParam )
{
case WM_KEYUP: // When the key has been pressed and released
{
//get the key code
pressedKey = (char)pKeyBoard->vkCode;
}
break;
default:
return CallNextHookEx( NULL, nCode, wParam, lParam );
break;
}
//do something with the pressed key here
....
//according to winapi all functions which implement a hook must return by calling next hook
return CallNextHookEx( NULL, nCode, wParam, lParam);
}
И тогда где-нибудь внутри вашей основной функции вы бы установили хук следующим образом:
//Retrieve the applications instance
HINSTANCE instance = GetModuleHandle(NULL);
//Set a global Windows Hook to capture keystrokes using the function declared above
HHOOK test1 = SetWindowsHookEx( WH_KEYBOARD_LL, LowLevelKeyboardProc, instance,0);
Более общую информацию о крючках можно найти здесь .
Вы также можете точно так же точно захватывать другие глобальные события, следуя указаниям, приведенным в документации SetWindowsHooksEX .