Re: Как предотвратить потерю фокуса приложением?
От: sasha Грузия  
Дата: 05.12.01 12:28
Оценка: 4 (1)
Здравствуйте 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));
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.