2010-07-17 2 views
5

Как определить одну или комбинацию штрихов ключей в ANSI C и/или с Win32 SDK?Как я могу обнаружить одну или комбинацию штрихов ключей в C?

Например: как я могу обнаружить нажатие CTRL + ALT + DEL?

Просьба предоставить мне какой-либо исходный код или любую веб-ссылку.

Обратите внимание, что я использую механизм опроса, а не событие.

Мне нужно сделать это в режиме консоли win32.

+1

Возможно, вы не сможете обнаружить CTRL + ALT + DEL из приложения для пользовательского пространства. Он обнаруживается и управляется драйвером режима ядра. Вам нужно будет написать драйвер режима ядра, чтобы перехватить эту комбинацию. Большинство других комбинаций клавиш должны быть обнаружены в пользовательском пространстве методом, указанным в ответе Эли. –

+0

@Amardeep: Я не уверен, что Autohotkey не может перехватывать CTRL + ALT + DEL. Если это возможно, то это, безусловно, проще, чем писать драйвер режима ядра –

+1

@Eli - Вы уверены, что он не устанавливает и не изменяет kmd? Безопасность входа в Windows будет скомпрометирована, если ctrl-alt-del может быть перехвачен приложением пользовательского пространства без прав администратора. Я думаю, что можно обнаружить комбинацию клавиш, но, вероятно, не до того, как kmd уже воздействует на нее. –

ответ

1

С ANSI C невозможно, так как ANSI C не определяет какой-либо метод доступа к клавиатуре таким образом. Функция нижнего уровня в нем, которая принимает входные данные от пользователя, равна getc, которая возвращает символ после того, как он был введен в stdin, и нажата клавиша ENTER.

Что касается API Win32, действительно, это можно сделать. В функции обработки сообщений (WndProc) вы должны следить за сообщениями WM_CHAR. Модификаторы помогут вам увидеть, нажаты ли клавиши CTRL и SHIFT.


P.S. просто мысль, может быть, то, что вы ищете, это такой инструмент, как Autohotkey?

+0

Мне нужно работать с main() not WinMain(). Можете ли вы предоставить мне какое-либо решение? – anonymous