Глобальный хук на клавиатуру вешай.
1. Создаеш свою Dll. В ней определяеш функцию
LRESULT CALLBACK KeyboardProc(
int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
);
Она будет в чужих процессах получать управление при нажатии на кнопку.
2. В своем приложении читаеш при помоши LoadLibrary библиотеку. И при помоши функции SetWindowsHookEx вешаеш хук с параметром WH_KEYBOARD.
Ну и соответственно нужно при выходе из программы все открытые хэндлы закрыть.
Вот пример самой функции. Правда она сделана на действия мыши, но принцип один и тот же.
LRESULT CALLBACK MouseProc(
int nCode, // hook code
WPARAM wParam, // message identifier
LPARAM lParam // mouse coordinates
)
{
MOUSEHOOKSTRUCT * mc= (MOUSEHOOKSTRUCT *) lParam;
static HWND hwnd=0;
if (hwnd != 0)
{
if (hwnd != mc->hwnd)
{
PostMessage(hwnd,WM_RECTLEAVE,0,0);
hwnd=mc->hwnd;
}
}
else hwnd=mc->hwnd;
return CallNextHookEx(NULL,nCode,wParam,lParam);
}
Вот код, который регистрирует хук в твоей программе:
AppDll=LoadLibrary("AppDll.dll");
if (AppDll !=NULL)
{
typedef LRESULT (CALLBACK *TMouseProc)(int, WPARAM, LPARAM);
hook = SetWindowsHookEx(WH_MOUSE, (TMouseProc) GetProcAddress(AppDll,"MouseProc"),AppDll,0);
}
Ну и код убийства всех хэндлов
if (hook !=NULL) UnhookWindowsHookEx(hook);
hook=NULL;
if (AppDll !=NULL) FreeLibrary(AppDll);
AppDll=NULL;