Как я могу перехватить все ключевые события, включая Ctrl + Alt + Del и Ctrl + Tab? - PullRequest
5 голосов
/ 20 мая 2009

Я пишу приложение типа экранной заставки, которое должно запретить пользователю доступ к системе без ввода пароля. Я хочу поймать / подавить различные методы, которые пользователь может попытаться закрыть из приложения, но все исследования, которые я делаю, указывают на то, что вы «не можете».

Все в C # или C ++ было бы замечательно. Я думал об отключении клавиатуры, но тогда у меня были бы другие проблемы.

Ответы [ 12 ]

31 голосов
/ 20 мая 2009

Вы не можете. Весь смысл Ctrl + Alt + Del в том, что обрабатывать его может только система, потому что таким образом система может всегда обрабатывать его.

К счастью, в Windows имеется встроенная поддержка экранных заставок, защищенных паролем (доступно как опция «При возобновлении, защита паролем» в свойствах экрана или через групповую политику). Просто используйте это.

15 голосов
/ 20 мая 2009

Чтобы добавить к тому, что сказал Shog9, если ваше приложение может перехватывать ctrl + alt + del, тогда ваше приложение сможет притвориться диалоговым окном входа в Windows, и таким образом обманом заставит конечного пользователя вводить свои учетные данные в ваше заявление.

Если вы хотите заменить диалоговое окно входа в Windows, см. Winlogon и GINA (но там написано: «DLL-библиотеки GINA игнорируются в Windows Vista», и я не слышал, что для Vista) .

если бы кто-то спросил, я бы не сказал им, что они не могут.

Более конкретно, ваше «прикладное программное обеспечение» не может: вместо этого, по замыслу, только «системное программное обеспечение» может сделать это; и это не значит, что вы не можете или не можете писать системное программное обеспечение, но ваш OP, казалось, совершенно ясно спрашивал, как это сделать без написания системного программного обеспечения ... и ответ на , что это то, что вы не можете: потому что система разработана так, чтобы приложение не могло перехватить эти комбинации клавиш.

Можете ли вы дать мне направление на написание системных вещей ... Я действительно думаю, что было бы лучше, если бы это было на системном уровне ... Это для OEM, так что это действительно так. Также, если бы я написал это на системном уровне, я мог бы написать приложение для управления им.

Драйвер устройства фильтрации клавиатуры или, например, DLL-библиотека GINA будет рассматриваться как системное программное обеспечение: устанавливается администратором (или OEM) и запускается как часть O / S.

Я не знаю о Джине, кроме ее имени; и я уже (выше) дал ссылку на это в MSDN. Я ожидаю, что это код пользовательского режима Win32.

Драйверы устройств - это отдельная тема: например, Начало работы по разработке драйверов .

Есть ли способ переназначить клавиатуру, чтобы удалить не там, где она была?

Я все еще не уверен, что вы и / или ваш начальник правильно поняли. ИМХО, вы не должны быть приложением, которое запрещает пользователю нажимать Ctrl-Alt-Del. Если вы хотите запретить пользователю доступ к системе без ввода пароля, вы должны заблокировать (защитить паролем) систему, как если бы пользователь нажал Ctrl Alt Del и затем выбрал «Заблокировать этот компьютер». Чтобы разблокировать компьютер, им нужно будет нажать Ctrl Alt Del и ввести свои учетные данные в WinLogon.

Однако, игнорируя то, что вы должны делать, и концентрируясь вместо этого на том, на что вы способны, если вы хотите перехватить клавиатуру, очевидно, это можно сделать. Я сам не изучал клавиатуры, но этот пост и этот пост заявляют об успехе, написав «Драйвер фильтра клавиатуры» (который является своего рода режимом ядра, а не Win32, драйвер устройства). Если вы напишите один из них, вы можете получить откат назад, например, как эта реакция от DDK MVP , или эта реакция от антиспадающего продукта .

4 голосов
/ 20 мая 2009

Я не проверял, но как насчет использования SetWindowsHookEx ()

Из документа MSDN: WH_KEYBOARD_LL

Windows NT / 2000 / XP: Устанавливает подключаемую процедуру, которая отслеживает низкоуровневые события ввода с клавиатуры. Для получения дополнительной информации см. Подключаемую процедуру LowLevelKeyboardProc.

3 голосов
/ 11 ноября 2012

Поскольку это, кажется, хорошее место для сбора различных средств, с помощью которых можно «перехватить» три ключевых псевдо-перерыва control alt delete, вот кое-что, с чем я столкнулся вчера, может быть полезным.

http://cuinl.tripod.com/Tips/enablectrldel.htm

По моему мнению , когда кажется, что единственный практичный и своевременный вариант - это отключить питание (т.е. МЕХАНИЧЕСКОЕ извлечение аккумулятора перегруженного портативного компьютера, похожего на Android), чтобы остановить процесс или неисправность приводит к довольно твердой и полной (или длительной) безответственности - кажется, что опасное и разочаровывающее происхождение продолжается - и продолжает ухудшаться.

Особенно с удалением разумных и простых вещей, таких как механические регуляторы громкости динамика. (конечно, громоздкий, более материальный, но, конечно, в этом-то и дело, что пользы для индивидуума или существа - это бесконечное и совершенное сознание без контроля или опыта?)

Это линия подходов к проектированию среды, которая отвечает за отзывчивость к пользовательской части критического и действительно значимого технологического интерфейса. (Единственное?)

Я говорю, положите некоторые кнопки - direct-to-hardware-control-- обратно на вещи - по крайней мере, пока программные аспекты этих технологий не станут полностью адаптированными к искусственному мягкому взаимодействию, которое я объясняю в исчерпывающем учете всего эвристического обеспечения.

Даже в механике вселенной, держу пари, есть удобный сброс, восстановление, приостановка, остановка типа (ей) функций для безопасности и фундаментальной жизнеспособности присутствия того, что могло бы стать разработчиком всего, что следует за инициирующим. вечная тайна существования: ИНТЕЛЛЕКТУАЛЬНАЯ ОСОЗНАННОСТЬ и Воля.

3 голосов
/ 20 мая 2009

Можно перехватить crtl + alt + del, хотя, очевидно, Microsoft сделала это очень сложно, потому что тогда вы могли бы открыть диалоговое окно с поддельной блокировкой и записать пароли людей.

Ответ - написать драйвер устройства. Я не могу вспомнить, можете ли вы просто использовать простой старый фильтр клавиатуры или вам нужно написать ISR клавиатуры. В любом случае, это, конечно, возможно, но с большой болью, если у вас нет опыта водителя.

1 голос
/ 15 июня 2019

запуск taskmgr.exe в скрытом окне сделает эту работу, если вы просто хотите отменить вызов диспетчера задач

    ProcessStartInfo taskmgr = new ProcessStartInfo()
    {
        FileName = "taskmgr.exe",
        WindowStyle = ProcessWindowStyle.Hidden
    };

    Process.Start(taskmgr);
1 голос
/ 29 сентября 2010

«Process Explorer» Марка Руссиновича (http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx) делает это, и делал это до того, как Microsoft купила Sysinternals.

Эта статья 2002 года, обновленная в 2006 году, объясняет один из способов сделать это без написания драйвера клавиатуры. http://www.codeproject.com/KB/system/preventclose.aspx?msg=1666328

1 голос
/ 25 мая 2009

ОК. Я не собираюсь публиковать здесь код Но вот что это за

создать крючок клавиатуры. когда пользователь нажимает Ctrl || alt || удалите set bools в true .. если они нажимают что-либо еще, установите их все в false.

switch (p_key)
            {
                default: Clear(); break;

                case Keys.LMenu: altHit = true; break;
                case Keys.RMenu: altHit = true; break;
                case Keys.LControlKey: ctrlHit = true; break;
                case Keys.RControlKey: ctrlHit = true; break;
                case Keys.Delete: delHit = true; break;

когда экран имеет фокус, теряет его в диспетчере задач, закройте чертову штуку. Экран мигает так быстро, что пользователь никогда не замечает этого. И я могу делать все, что захочу.

Я признаю, что это клудж, но он дает желаемый эффект. (О, я бы не хотел этого делать)

1 голос
/ 20 мая 2009

А как насчет перехвата нажатий клавиш Ctrl и Alt во время работы вашей программы и отмены этих нажатий клавиш?

Я не знаю, насколько хорошо это будет работать, если вообще будет в Vista, но попробовать стоит.

Я помню, что делал что-то подобное примерно в 2001 году, поэтому, вероятно, он работал на 98-м. Давно я пытался возиться с чем-то вроде блокировки ctrl-alt-del.

1 голос
/ 20 мая 2009

Попробуйте выяснить, можете ли вы написать приложение, которое запускается как заставка, защищенная паролем.

Заставки могут делать больше, чем просто показывать красивые картинки - я уже видел интерактивные заставки, которые использовали мышь и клавиатуру для создания простой игры, хотя я не могу вспомнить, на какой версии окон я видел, как они работали ... Это вполне могли быть окна 95. (В этом случае все ставки выключены).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...