Запретить пользователям выход из приложения Windows через системные горячие клавиши - PullRequest
4 голосов
/ 16 августа 2011

Я работал над приложением кассового и кассового аппарата. Нам нужно запретить пользователям выходить из приложения, используя комбинации Alt + Esc, Ctrl + Alt + Del или Alt + Tab и т. Д., И мы будем предоставлять отдельную настраиваемую горячую клавишу для выхода. Приложение будет полноэкранным и без кнопки закрытия. Я уже сделал полный экран без кросс-кнопки, но застрял с отключением горячих клавиш низкого уровня системы. Как мне это сделать в C #? Будем благодарны за любые справочные или альтернативные методы (например, настройку разрешений группы пользователей для предотвращения использования звездного меню / диспетчера задач или любую другую альтернативу для достижения цели).

Редактировать: мы используем WinForms. Приложение будет работать в Windows XP / Vista / 7.

1 Ответ

5 голосов
/ 16 августа 2011

Нет прямого способа избежать стандартного поведения Windows.Пользователь Windows должен иметь возможность убивать приложения.Если приложение не подчиняется, система принудительно уничтожит его.

Однако есть несколько хитростей, часто используемых вирусописателями, вот некоторые (не исчерпывающие):

  • Отключение всех системных горячих клавиш относительно тривиально, но Ctrl-Alt-Del не входит в их число.Посмотрите эту превосходную статью проекта кода с примером приложения.
  • Создайте DLL и внедрите себя в другие процессы, жизненно важные для системы.Это легко сделать, но убедитесь, что вы переносите свое приложение с .NET на автономный C ++ или другой язык, вы не хотите, чтобы системные процессы зависели от версии .NET, которую вы загружаете.
  • Вместо dll-предложения вы можете создать что-то вроде расширения оболочки с такой библиотекой, как эта , которая позволит вам продолжать использовать .NET.Он не предназначен для такого рода вещей, но заставляет пользователя убить explorer.exe, чтобы избавиться от вашего приложения.
  • Создать сервис, который может взаимодействовать с рабочим столом.Ограничьте права службы обычным способом, который по сути дает тот же эффект, что запрещает пользователям убивать ваше приложение указанными вами способами.
  • Очевидно, вам следует отменить любые WM_CLOSE, WM_EXIT или WM_KILL сообщение и просто продолжайте "жить".
  • Используйте сторожевое приложение, это то, что используют большинство антивирусных сканеров: если вы убьете один процесс, сторож будет его перезапускать.Если вы убьете часового, оно должно быть перезапущено основным приложением.Плохое поведение, но работает.

Но, общий совет: не делайте этого.Разрешите своим пользователям потенциально убивать программу, если это необходимо, иначе будет очень сложно выполнить какое-либо обслуживание.Единственный «поддерживаемый» способ - через службы, где вы можете разрешить специальным пользователям останавливать вашу службу, и ее нельзя остановить с помощью диспетчера задач.

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