Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование на WinApi, C++Builder, Visual C++


Информационный Канал Subscribe.Ru


Выпуск № 9-2003 BCBDEV.BY.RU

Здравствуйте уважаемые подписчики!

Перед вами очередной выпуск рассылки "Программирование на WinApi"

Отключение клавиш
Существует несколько методов, которые позволяют ограничить пользователя в плане перезагрузки компьютера. Самый простой, это отключить комбинацию клавиш Ctrl+Alt+Del.
Следующий код отключает сочетание Ctrl+Alt+Del и Alt+Tab.
//Отключить
res = 1;
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, (void *) &res, 0);

//Включить
res = 1;     SystemParametersInfo(SPI_SCREENSAVERRUNNING, 0, (void *) &res, 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));
            //тут можно добавить другие клавиши....
            //код 46 означает del
         break;
      }
   }
   return(fEatKeystroke ? 1 : CallNextHookEx(NULL, nCode, wParam, lParam));
}


int WINAPI WinMain(HINSTANCE hinstExe, HINSTANCE, PTSTR pszCmdLine, int) {

   // Устанавливаем низкоуровневую ловушку на клавиатуру и мышку
   HHOOK hhkLowLevelKybd  = SetWindowsHookEx(WH_KEYBOARD_LL,
      LowLevelKeyboardProc, hinstExe, 0);

   // Ловушки будут работать пока не завершится приложение
   MessageBox(NULL,
      TEXT("Alt+Esc, Ctrl+Esc, и Alt+Tab не работают.\n"),
      TEXT("Отключение клавиш"), MB_OK);
   UnhookWindowsHookEx(hhkLowLevelKybd);

   return(0);
}

Удачи Вам в Ваших делах Куковинец Андрей aka Juggernaut

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное