Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > ОС и железо
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 05.02.2015, 16:33
fn12gl34 fn12gl34 вне форума
Прохожий
 
Регистрация: 09.01.2015
Сообщения: 30
Версия Delphi: 10
Репутация: 10
По умолчанию Процессы не хотят убиваться

Приветствую, Господа. Столкнулся с проблемой: процессы упорно не хотят вырубаться программным методом.
Вырубать их нужно по названиям. Использую следующую функцию:
Код:
function KillTask(ExeFileName: string): integer; 
const 
  PROCESS_TERMINATE=$0001; 
var 
  ContinueLoop: BOOL;
  FSnapshotHandle: THandle; 
  FProcessEntry32: TProcessEntry32; 
begin 
  result := 0; 

  FSnapshotHandle := CreateToolhelp32Snapshot
                     (TH32CS_SNAPPROCESS, 0);
  FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle,
                                 FProcessEntry32);

  while integer(ContinueLoop) <> 0 do
  begin
    if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
         UpperCase(ExeFileName))
     or (UpperCase(FProcessEntry32.szExeFile) =
         UpperCase(ExeFileName))) then
      Result := Integer(TerminateProcess(OpenProcess(
                        PROCESS_TERMINATE, BOOL(0),
                        FProcessEntry32.th32ProcessID), 0)); 
    ContinueLoop := Process32Next(FSnapshotHandle,
                                  FProcessEntry32); 
  end;

  CloseHandle(FSnapshotHandle);
end;

Но результат нулевой. Потом попробовал этот вариант:
Код:
function KillProcess(ExeName: string): LongBool;
var
 B: BOOL;
 ProcList: THandle;
 PE: TProcessEntry32;
begin
 Result := False;
 ProcList := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 PE.dwSize := SizeOf(PE);
 B := Process32First(ProcList, PE);
 while B do begin
   if (UpperCase(PE.szExeFile) = UpperCase(ExtractFileName(ExeName))) then
     Result := TerminateProcess(OpenProcess($0001, False, PE.th32ProcessID), 0);
    B := Process32Next(ProcList, PE);
 end;
 CloseHandle(ProcList);
end; 
Но эффекта опять нет.
Прошу вашей помощи в разрешении этой проблемки
Ответить с цитированием
  #2  
Старый 05.02.2015, 16:49
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Ф-ии то что возвращают?
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 06:28.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter