Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Убийство приложений [D6, WinXP]


Страницы:   1 2

Colt ©   (2003-02-25 09:08:00) 

Пишу программу, в функции которой входит ограничение работы пользователя по времени за компьютером. Вся проблема теперь свелась к тому, что пользовтель может через Regedit (самое элементарное)убрать строку на запуск программы из реестра (доп. утилиты и программы для редактирования автозапуска системы не установленны). Можно убрать программу через диспетчер программ, Подскажите как и что использовать в решении этой проблеммы, желательно как просто убивать окна диспетчера задач или редактор реестра.
Кто может помогите исходником.


ers   (2003-02-25 10:05:00) [21]

А эта вот процедара отключает диспечер задач в реестре
procedure NoTaskMngr(enabled:boolean);
var
reg: TRegistry;
begin
reg:=TRegistry.Create;
reg.RootKey:=HKEY_CURRENT_USER;
reg.OpenKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System",true);
if enabled=true
then reg.WriteInteger("DisableTaskMgr",1)
else reg.WriteString("DisableTaskMgr","");
reg.CloseKey;
reg.Free;
end;

Только не забудь добавить в uses юнит registry
Использование этих двух функций такое:
Выключение диспечера задач: NoTaskMngr(true);
Включение диспечера задач: NoTaskMngr(False);
-------
Убийство проги по её заголовку: KillProgram(nil,"Delphi 6");
Убийство проги по классу: killProgram("ProgMan",nil);
Можно задавать как класс, так и заголовок!
Удачи!


ers   (2003-02-25 09:56:00) [22]

А вот код который не дает проге убится диспечером задач:
if (InitializeAcl(ACL,SizeOf(_ACL),ACL_REVISION)) and (IsValidAcl(ACL))
then SetSecurityInfo(OpenProcess(PROCESS_ALL_ACCESS,false,GetCurrentProcessID),SE_KERNEL_OBJECT,DACL_SECURITY_INFORMATION,nil,nil,@ACL,nil);

в Var ACL : _ACL;


ers   (2003-02-25 09:54:00) [23]

Во-первых: Можно сделать так, чтоб диспечер задачь не убивал твою прогу! Потом в моей проге вообще отключен диспечер задачь, тоесть его вызвать можно только вызовом экзешника, а это не так просто у меня......
Если говорить о реестре в плане автозагрузки своей проги, то я сделал по другому! В 2000 да я думаю и в хп, можно заменить стандартный эксплодер своей прогой, это раз! А во вторых можно создать "список разрешенных для запуска программ", кроме которых ничего не сможет загрузится, и ещё! Можно в реестре отключить возмность запуска regedit`a
Код убийства программы по её класу и/или заголовку:

procedure KillProgram(ClassName: PChar; WindowTitle: PChar);
const
PROCESS_TERMINATE = $0001;
var
ProcessHandle : THandle;
ProcessID: Integer;
TheWindow : HWND;

begin
TheWindow := FindWindow(PChar(ClassName), PChar(WindowTitle));
GetWindowThreadProcessID(TheWindow, @ProcessID);
ProcessHandle := OpenProcess(PROCESS_TERMINATE, FALSE, ProcessId);
TerminateProcess(ProcessHandle,4);
end;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо