Как я могу подключить Ctrl-Alt-Tab? - PullRequest
3 голосов
/ 09 января 2010

Я пытаюсь подключить клавиатуру в моей программе, но есть кое-что, чего я не могу выполнить. Метод ниже - самая важная часть в моем классе, где я работаю с определенными комбинациями клавиш. Все они работают, но я также хочу подключить Ctrl-Alt-Tab. Я часами пытался понять, что делать, но пришел с пустыми руками. Как я могу подключить и эту комбинацию?

Более подробную информацию можно найти здесь:
http://msdn.microsoft.com/en-us/library/ms644967(VS.85).aspx
http://msdn.microsoft.com/en-us/library/ms927178.aspx

 private static IntPtr KeyboardHookHandler(int nCode, IntPtr wParam, KBDLLHookStruct lParam)
 {
   if (nCode == 0)
   {              

    if ( ( (lParam.flags == 32)  && (lParam.vkCode == 0x09) ) ||      // Alt+Tab
         ( (lParam.flags == 32)  && (lParam.vkCode == 0x1B) ) ||      // Alt+Esc
         ( (lParam.flags == 0 )  && (lParam.vkCode == 0x1B) ) ||      // Ctrl+Esc
         ( (lParam.flags == 1 )  && (lParam.vkCode == 0x5B) ) ||      // Left Windows Key
         ( (lParam.flags == 1 )  && (lParam.vkCode == 0x5C) ) ||      // Right Windows Key
         ( (lParam.flags == 32)  && (lParam.vkCode == 0x73) ) ||      // Alt+F4              
         ( (lParam.flags == 32)  && (lParam.vkCode == 0x20) ))        // Alt+Space

    {
        return new IntPtr(1);
    }
  }

  return CallNextHookEx(hookPtr, nCode, wParam, lParam);
}

Ответы [ 3 ]

2 голосов
/ 09 января 2010

Миры, вы правильно блокируете клавиши, но вам нужно выполнить побитовые операции И над вашими флагами lParam.flags, чтобы определить, была ли нажата более одной клавиши-модификатора.

Это не в моей голове, но я думаю, что код выглядит так:

(lParam.flags == 32)

должно выглядеть примерно так:

((lParam.flags & 32 == 32) && (lParam.flags & 16 == 16))

32 и 16 являются произвольными в этом примере. Вам нужно выяснить, какие значения ALT и CTRL на самом деле. Они будут равны 1, 2, 4 ... 16, 32 и т. Д., Так что их можно объединить в одно значение.

0 голосов
/ 09 января 2010

Вы должны создать подкласс насоса сообщений win32.
Возможно, вы получите некоторые идеи из этого проекта VC6 Trap CtrlAltDel; Скрыть приложение в списке задач на Win2000 / XP

0 голосов
/ 09 января 2010

Возможно, стоит потратить время на ознакомление с этой статьей Пола ДиЛаскья, который показывает, как перехватывать комбинации клавиш Ctrl + Alt + Del здесь . Доступна версия для .NET Framework, найденная в CodeProject здесь и здесь .

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

...