1. 원하는 프로세스를 찾기 위해서 ToolAPI를 이용해야 합니다. 이를 위해서는 TlHelp32 유닛을 사용합니다. 다음은 현 시스템의 모든 프로세스 목록을 얻는 예제입니다.
uses ... , TlHelp32, ... ;
procedure TMainForm.btnGetProcessListClick(Sender: TObject);
var
AProcessEntry32:LPPROCESSENTRY32;
hProcessSnap:THandle;
blnNext:BOOL;
i:integer;
begin
ClearProcessList;
hProcessSnap:=CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
try
New(AProcessEntry32);
AProcessEntry32^.dwSize:=SizeOf(TProcessEntry32);
blnNext:=Process32First(hProcessSnap, AProcessEntry32^);
while blnNext do
begin
lbProcessList.AddItem(AProcessEntry32^.szExeFile,TObject(AProcessEntry32));
New(AProcessEntry32);
AProcessEntry32^.dwSize:=SizeOf(TProcessEntry32);
blnNext:=Process32Next(hProcessSnap, AProcessEntry32^);
end;
finally
Dispose(AProcessEntry32);
CloseHandle(hProcessSnap);
end;
end;
CreateToolHelp32Snapshot API가 원하는 프로세스를 구하기 위한 핵심입니다. CreateToolHelp32Snapshot API를 이용하여 스냅샷을 얻어서 프로세스를 하나하나 리스트뷰어 추가해 줍니다.
TProcessEntry32.szExeFile 을 참조하여 원하는 프로세스를 찾을 수 있습니다.
2. 프로세스 경로 얻기
1. 번에서 원하는 프로세스를 찾을 경우, TProcessEntry32.th32ProcessID 값으로 프로세스의 ID를 알 수 있습니다. 이 ProcessID로 프로세스의 전체 파일 경로는 다음과 같은 함수로 얻을 수 있습니다. 이 함수를 이용하기 위해서는 PsAPI 유닛을 추가해 주어야만 합니다.
uses ... , PsAPI, ... ;
function GetPathFromProcessID(AProcessID:DWORD): string;
var
AProcessHandle:THandle;
szFileName: array [0..MAX_PATH-1] of char;
MH: THandle;
begin
Result:='';
AProcessHandle:=OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,false,AProcessID);
if (AProcessHandle<>0) then
begin
if (GetModuleFileNameEx(AProcessHandle,0,szFileName,MAX_PATH)>0) then
Result:=szFileName;
CloseHandle(AProcessHandle);
end;
end;
혹은 ProcessID를 이용하여 ToolAPI의 ModuleFirst 함수를 이용하여 모듈에 대한 실행 경로를 얻을 수도 있습니다.
'프로그래밍 > 델파이' 카테고리의 다른 글
비트맵 이미지를 회전하는 메소드 (0) | 2007.12.22 |
---|---|
플래쉬에 값 설정하기 (0) | 2007.12.22 |
IE 보안탭의 신뢰할 수 있는 사이트에 등록하기 (0) | 2007.12.21 |
DLL에 버전 정보를 넣어 보자 (0) | 2007.12.21 |
StrToInt 함수에서, 16진수의 변환 (0) | 2007.12.21 |