윈도우 실행중 어떤 프로세스가 실행 되고 있는지 DLL 은 어떤 항목이 로드되어 사용 하는지를 가져오는 기능입니다.
CreateToolhelp32Snapshot 함수를 사용해서 현재 상태를 알 수 있습니다.
내용은 아주 오래전 양병규님이 만드시 자료 같은데 조금 내용을 추가 하였습니다.
소스를 한번 살펴 보겠습니다.
간단히 설명하면
1.스샷으로 프로세스 상태를 가져오고
2.DLL 또는 프로세스 구분을 해서 목록을 가져옵니다.
3.가져온 목록을 Looping 해서 출력해주면 끝
procedure EnumModules(Strings: TStrings);
var
Snapshot, SHandle: THandle;
ModuleEntry: TModuleEntry32;
Process32: TProcessEntry32;
NextModule: BOOL;
Next: Boolean;
hProcess: THandle;
begin
//-------------------------------
//* 로드된 DLL 목록 구하기 *
//-------------------------------
// 현재 시스템의 프로세스 상태를 읽어온다 스냅샷
Snapshot := CreateToolhelp32Snapshot( TH32CS_SNAPALL, GetCurrentProcessID );
//구조체 사이즈 할당
ModuleEntry.dwSize := Sizeof(MODULEENTRY32);
// 첫번째 모듈을 읽어옴
NextModule := Module32First( Snapshot, ModuleEntry );
//Loop 를 돌면서 DLL 정보를 Strins 에 담기
while NextModule do
begin
Strings.Add( ModuleEntry.szExePath );
NextModule := Module32Next( Snapshot, ModuleEntry );
end;
CloseHandle( Snapshot );
//-------------------------------
// 실행 프로세스 목록 구하기
//-------------------------------
Strings.Add( '--------------------------------------------------------------' );
// 현재 시스템의 프로세스 상태를 읽어온다 스냅샷
SHandle :=CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
//구조체 사이즈 할당
Process32.dwSize:=SizeOf(PROCESSENTRY32);
// 첫번째 프로세스 읽어옴
Next := Process32First(SHandle, Process32);
//Loop 를 돌면서 프로세스 정보를 Strins 에 담기
while Next do
begin
Strings.Add( Process32.szExeFile);
Next:=Process32Next(SHandle, Process32);
end;
CloseHandle(SHandle);
end;
아래는 로드된 DLL 내용을 보여줍니다.
[System Process] 부터는 실행 중이 프로세스 목록을 보여줍니다.
델파이 프로그램 안에 DLL 목록을 보여주는 기능이 있습니다.
View -> Debug windows -> Modules 를 선택하면 첫번째 로드된 DLL 목록 가져오기 기능과 동일함을 알 수 있습니다.
실행 중인 프로세스 목록 가져오기는 특정 프로세스가 실행 되었는지 알 수도 있고 강제로 중지 할 수도 있도록 기능을 확장해서 사용 할 수 있습니다.
'프로그램 개발 > 델파이' 카테고리의 다른 글
델파이(delphy) system unit - B함수 (0) | 2020.08.31 |
---|---|
델파이(delphy) system unit - A함수 (0) | 2020.08.31 |
델파이 날짜 함수 설명 (0) | 2020.08.13 |
델파이 Find in Files시 Messages 펼처보기 (0) | 2020.08.06 |
[2020년 상반기] 기술자료 TOP 10 - 개발자들이 가장 많이 클릭한 기술자료는? (0) | 2020.07.14 |