2010-01-09 4 views
2

Я пытаюсь подключить клавиатуру в своей программе, но есть что-то, чего я не могу выполнить. Нижеприведенный метод является наиболее важной частью моего класса, где я обрабатываю определенные комбинации клавиш. Все они работают, но я также хочу подключить Ctrl-Alt-Tab. Я потратил часы, пытаясь понять, что делать, но я пришел с пустыми руками. Как я могу подключить эту комбинацию?Как я могу перехватить 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); 
} 

ответ

2

Worlds, вы правильно улавливать ключи, но вам необходимо выполнить побитовое И операций над lParam.flags, чтобы определить, была ли нажата более чем один ключ модификатора.

Это от верхней части моей головы, но я думаю, что код, который выглядит следующим образом:

(lParam.flags == 32) 

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

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

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

+0

LCTRL имеет флаг 0 при нажатии и 128 при отпускании. RCTRL имеет флаг 1 при нажатии и 129 при отпускании. Система не дает мне трех флагов, соответствующих ключам. Я могу больше всего ловить две клавиши. – user246392

0

Это может быть стоит ваше время, чтобы проверить эту статью Пола DiLascia, который показывает, как ловушку клавиш Ctrl + Alt + Del сочетание here. Существует версия, доступная для платформы .NET, найденная в CodeProject here и here.

Надеюсь, это поможет, С уважением, Tom.

 Смежные вопросы

  • Нет связанных вопросов^_^