Как мне создать приложение WinForms, которое блокирует / замораживает любое другое приложение и не может быть закрыто? - PullRequest
0 голосов
/ 21 декабря 2011

Я пишу приложение на c #, чтобы заблокировать или заморозить все программы, пока пользователь не введет значение в текстовое поле приложения и не нажмет ОК.

Цель приложения - заставить людей вводить свое время.

Насколько я знаю, вы можете установить его на самый верхний уровень, но они могут завершить приложение с помощью диспетчера задач, поэтому я застрял здесь ..

formName.TopMost = true;

Любая помощь будет оценена

1 Ответ

2 голосов
/ 21 декабря 2011

Да, это правильно.Операционная система Windows позволяет запускать несколько программ одновременно.То, что вы испытываете, полностью задумано.

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

Нет законного способа обойти это.Это не «ограничение», это особенность.Любое приложение, которое предотвращает закрытие себя с помощью диспетчера задач, опасно тесно связано с категорией программного обеспечения, которое мы называем вредоносным ПО.Ничто хорошее не может выйти из таких занятий.

Соответствующее прочтение: Гонка вооружений между программами и пользователями


Возможно, хорошим компромиссным решением будет сделать вашwindow / form фактически top-most и отключите кнопку Close, чтобы пользователь знал, что он не должен пытаться закрыть его.Этого почти всегда достаточно, чтобы остановить пользователя, который не намерен завершать ваше приложение любыми необходимыми средствами, и это все, что вам когда-либо нужно беспокоиться.

См. Пример кода здесь о том, как заставить ваше окно / форму всегда отображаться поверх других запущенных приложений, установив флаг WS_EX_TOPMOST или переключив HWND_TOPMOST.

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

...