프로세스가 살아있는지 검사
 
// 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;








Posted by bloodguy
,