Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 6 181

/ вопрос решён /

Здравствуйте, эксперты!
Помогите реализовать следующее:
Данная функция убивает процессы по имени файла с расширением. Как сделать, что-бы данная функция считывала имя файла для убития из определённого файла на диске например project.ini и затем убивала данный процесс?

Приложение:
  1. function KillTask(ExeFileName:String):integer;
  2. const Process_Terminate=$0001;
  3. var ContinueLoop:BOOL;
  4. FSnapShotHandle:THandle;
  5. FProcessEntry32:TProcessEntry32;
  6. begin
  7. result:=0;
  8. FSnapShotHandle:=CreateToolHelp32SnapShot(TH32CS_SnapProcess,0);
  9. FProcessEntry32.dwSize:=SizeOf(FProcessEntry32);
  10. continueLoop:=Process32First(FSnapShotHandle,FProcessEntry32);
  11. while integer(continueloop)<>0 do
  12. begin
  13. if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile))= UpperCase(ExeFileName))
  14. or (UpperCase(FProcessEntry32.szExeFile) = UpperCase(ExeFileName))) then
  15. Result:=Integer(TerminateProcess(OpenProcess(Process_TERMINATE,bool(0),
  16. FProcessEntry32.th32ProcessID),0));
  17. ContinueLoop:=Process32Next(FSnapShotHandle,FProcessEntry32);
  18. end;
  19. CloseHandle(FSnapShotHandle);
  20. end;
  21.  
  22. procedure TProcessKil.FormCreate(Sender: TObject);
  23. begin
  24. KillTask('SecyrityKey.exe');
  25.  
  26. end;


Халитов Р.Ш Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Халитов Р.Ш (статус: 1-ый класс)
Вопрос отправлен: 4 июня 2012, 00:15
Состояние вопроса: решён, ответов: 1.

Ответ #1. Отвечает эксперт: min@y™

Ну, допустим, файл project.ini выглядит вот так:

[ToKill]
process=SecyrityKey.exe
Тогда для чтения можно написать такую фунцию:
function GetKillProcName: string;
var
  Ini: TIniFile;
begin
  Ini:= TIniFile.Create('project.ini');
  try
    Result:= Ini.ReadString('ToKill', 'process', '');
  finally
    Ini.Free();
  end;
end;

Если в ini-файле требуется хранить несколько имён файлов процессов, подлежащих убиению, например:
[ToKill]
Count=3
process0=SecyrityKey.exe
process1=iexplore.exe
process2=wmplayer.exe
то функцию можно написать более другую :)
procedure GetKillProcNames(ANames: TStrings);
var
  Ini: TIniFile;
  Index, Count: Integer;
begin
  Ini:= TIniFile.Create('project.ini');
  ANames.Clear();
  try
    Count:= Ini.ReadInteger('ToKill', 'Count', 0);
 
    for Index:= 0 to Count - 1 do
      ANames.Add(Ini.ReadString('ToKill', 'process' + InToStr(Index), ''));
  finally
    Ini.Free();
  end;
end;

Ну, вот, как-то так...

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 4 июня 2012, 08:21
Оценка за ответ: 5

Комментарий к оценке: Спасибо большое за ответ!
Супер!!!

Мини-форум вопроса

Всего сообщений: 0.

4 июня 2012, 11:50: Статус вопроса изменён на решённый (изменил модератор DNK)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 16:27
Выполнено за 0.02 сек.