Другие языки программирования и технологии

Блокировка возможности выхода из приложения Delphi

Нужно создать пароль на выход из программы, при этом исключив возможность "убить" процесс из диспетчера задач.
Если можете, без умных слов, пожалуйста.. Просто накидайте код.. Спасибо за помощь.
Как ты собираешься скрыть свой процесс в диспетчере? Это, мягко говоря, невозможно. НО, есть другой способ. Сейчас расскажу.

Можно отключить диспетчер задач на время работы твоей программы. Для этого, нужно в реестре редактировать ключ DisableTaskMgr в ветке \Software\Microsoft\Windows\CurrentVersion\Policies\System

А конкретно это можно сделать вот так:
uses Registry; // незабываем подключить этот модуль..!!

procedure LockerTask(lock_id: integer);
const
sKey = 'DisableTaskMgr';
var
Reg : TRegistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Policies\System', True) then
begin
if Reg.ValueExists(sKey) then
begin
case lock_id of
1: Reg.WriteString (sKey, '1'); // отключить диспетчер
100: Reg.WriteString (sKey, '100'); // включить диспетчер
end;
end;
Reg.CloseKey;
end;
finally
Reg.Free;
end;
end;

Эта функция работает следующим образом: если на вход, в качестве параметра она получает "1" - диспетчер задач отключается. Если на вход получает "100" - диспетчер задач включается. При запуске приложения в событии FormLoad ты должен вызывать эту функцию с параметром "1", а когда юзер введет правильный пароль - вызываете функцию с параметром "100"

Метки в CaseOf можно поменять на "0" и "1" для удобства.

Вот еще вариант такого кода:

uses Registry;

...

procedure LockTaskManager(Lock : Boolean = True);
const
sKey = 'DisableTaskMgr';
begin
with TRegistry.Create do
begin
RootKey := HKEY_CURRENT_USER;
if not OpenKey('\Software\Microsoft\Windows\CurrentVersion\Policies\System', True) then Exit;
if Lock then WriteString(sKey, '1') else WriteString(sKey, '100');
CloseKey;
Free;
end;
end;

...

procedure TForm1.Button1Click(Sender: TObject);
begin
LockTaskManager();
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
LockTaskManager(False);
end;

__www.delphisources.ru/forum/showthread.php?t=10617
Kostya Nefteyugansk
Kostya Nefteyugansk
17 771
Лучший ответ
╬═Ђǿřǯ¥Î═╬ мне кажется, у нас проблемы.. программа будет запускаться не под учеткой админа.. это не помешает?
Что может помешать убить нормальное приложение из диспетчера задач? НИЧЕГО. Значит вешайте некий сервис, который будет при закрытии вашего приложения стартовать его заново.

Похожие вопросы