본문 바로가기
카테고리 없음

프로세스가 살아있는지 검사 / 프로세스 죽이기

by MonoSoft 2022. 4. 1.
728x90
반응형

프로세스가 살아있는지 검사, 프로세스 죽이기

 

// uses 에 TlHelp32 추가

function IsRunningProcess(const ProcName: String) : Boolean;

var

Process32: TProcessEntry32;

SHandle: THandle;

Next: Boolean;
begin

Result:=False;

Process32.dwSize:=SizeOf(TProcessEntry32);

SHandle :=CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);

// 프로세스 리스트를 돌면서 매개변수로 받은 이름과 같은 프로세스가 있을 경우 True를 반환하고 루프종료

if Process32First(SHandle, Process32) then begin

repeat

Next:=Process32Next(SHandle, Process32);

if AnsiCompareText(Process32.szExeFile, Trim(ProcName))=0 then begin

Result:=True;

break;

end;

until not Next;

end;

CloseHandle(SHandle);

end;

 

// 사용예. 계산기(calc.exe)가 떠있는지 확인하고 싶을 경우

procedure TForm1.Button1Click(Sender: TObject);

begin

if IsRunningProcess('calc.exe') then OutputDebugString('계산기 있음')

else OutputDebugString('계산기 없음');

end;

 

프로세스 죽이기 (강제종료)

// uses 에 TlHelp32 추가

function KillProcess(const ProcName: String): Boolean;

var

Process32: TProcessEntry32;

SHandle: THandle;

Next: Boolean;

hProcess: THandle;

i: Integer;

begin

Result:=True;

Process32.dwSize :=SizeOf(TProcessEntry32);

Process32.th32ProcessID:=0;

SHandle :=CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);

 

// 종료하고자 하는 프로세스가 실행중인지 확인하는 의미와 함께...

if Process32First(SHandle, Process32) then begin

repeat

Next:=Process32Next(SHandle, Process32);

if AnsiCompareText(Process32.szExeFile, Trim(ProcName))=0 then break;

until not Next;

end;

CloseHandle(SHandle);

 

// 프로세스가 실행중이라면 Open & Terminate

if Process32.th32ProcessID<>0 then begin

hProcess:=OpenProcess(PROCESS_TERMINATE, True, Process32.th32ProcessID);

if hProcess<>0 then begin

if not TerminateProcess(hProcess, 0) then Result:=False;

end

 

// 프로세스 열기 실패

else Result:=False;

CloseHandle(hProcess);

end // if Process32.th32ProcessID<>0

else Result:=False;

end;

 

// 사용예. 계산기(calc.exe) 프로세스를 죽이고자 할 때.

procedure TForm1.Button1Click(Sender: TObject);

begin

if KillProcess('calc.exe') then OutputDebugString('계산기 죽이기 실패. 계산기 프로세스가 없었거나...')

else OutputDebugString('계산기 죽이기 성공.');

end;

 

728x90
반응형

댓글