Здравствуйте asd, Вы писали:
asd>Хочется вот чего: чтобы приложение, основанное на диалоге никогда не теряло фокус (не путайте с топ-мост), то есть чтобы пока оно выполняется, нигде более нельзя было бы кликать, переключаться по Alt-Tab, Ctrl-Esc итд. Как такое запрограмить под Win2K (про то, чтобы запретить Ctrl-Alt-Del я даже не прошу)?
Установи низкоуровневый клавиатурный хук
HHOOK hhkLowLevelKybd = SetWindowsHookEx(WH_KEYBOARD_LL,LowLevelKeyboardProc, hinstExe, 0);
LRESULT CALLBACK LowLevelKeyboardProc(int nCode,
WPARAM wParam, LPARAM lParam) {
А вот и процедура:
BOOL fEatKeystroke = FALSE;
if (nCode == HC_ACTION) {
switch (wParam) {
case WM_KEYDOWN: case WM_SYSKEYDOWN:
case WM_KEYUP: case WM_SYSKEYUP:
PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT) lParam;
fEatKeystroke =
( (p->vkCode == VK_TAB) && ((p->flags & LLKHF_ALTDOWN) != 0) ) ||
( (p->vkCode == VK_ESCAPE) && ((p->flags & LLKHF_ALTDOWN) != 0) ) ||
( (p->vkCode == VK_ESCAPE) && ((GetKeyState(VK_CONTROL) & 0x8000) != 0) )||
( (p->vkCode == 46) && ( (p->flags & LLKHF_ALTDOWN) != 0 ) &&
( (GetKeyState(VK_CONTROL) & 0x8000) != 0));
break;
}
}
return(fEatKeystroke ? 1 : CallNextHookEx(NULL, nCode, wParam, lParam));
}