프로세스를 전부 뒤져서 특정 DLL을 로딩하고 있다면 종료시키기.
중간중간 낚아채서 여러가지 응용이 있을 수 있음.
프로세스리스트, 모듈리스트 뒤지는 걸 자꾸 까먹어서 기록해 둠.
procedure KillProcByDLL(DLLName: String);
var
Proc32: TProcessEntry32;
Mod32: TModuleEntry32;
hSnapshotP, hSnapshotM: THandle;
hProc: THandle;
NextP, NextM: Boolean;
begin
Proc32.dwSize:=SizeOf(Proc32);
hSnapshotP:=CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if Process32First(hSnapshotP, Proc32) then begin
// 프로세스 리스트
repeat
NextP:=Process32Next(hSnapshotP, Proc32);
Mod32.dwSize:=SizeOf(Mod32);
hSnapshotM:=CreateToolHelp32Snapshot(TH32CS_SNAPMODULE, Proc32.th32ProcessID);
if Module32First(hSnapshotM, Mod32) then begin
// 모듈리스트
repeat
NextM:=Module32Next(hSanpshotM, Mod32);
if AnsiCompareText(Mod32.szModule, DLLName)=0 then begin
hProc:=OpenProcess(PROCESS_TERMINATE, True, Proc32.th32ProcessID);
if hProc<>0 then TerminateProcess(hProc, 0);
end;
until not NextM;
end;
CloseHandle(hSnapshotM);
until not NextP;
end;
CloseHandle(hSnapshotP);
end;
var
Proc32: TProcessEntry32;
Mod32: TModuleEntry32;
hSnapshotP, hSnapshotM: THandle;
hProc: THandle;
NextP, NextM: Boolean;
begin
Proc32.dwSize:=SizeOf(Proc32);
hSnapshotP:=CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if Process32First(hSnapshotP, Proc32) then begin
// 프로세스 리스트
repeat
NextP:=Process32Next(hSnapshotP, Proc32);
Mod32.dwSize:=SizeOf(Mod32);
hSnapshotM:=CreateToolHelp32Snapshot(TH32CS_SNAPMODULE, Proc32.th32ProcessID);
if Module32First(hSnapshotM, Mod32) then begin
// 모듈리스트
repeat
NextM:=Module32Next(hSanpshotM, Mod32);
if AnsiCompareText(Mod32.szModule, DLLName)=0 then begin
hProc:=OpenProcess(PROCESS_TERMINATE, True, Proc32.th32ProcessID);
if hProc<>0 then TerminateProcess(hProc, 0);
end;
until not NextM;
end;
CloseHandle(hSnapshotM);
until not NextP;
end;
CloseHandle(hSnapshotP);
end;
'Delphi' 카테고리의 다른 글
[Delphi] 에디트박스에 문자열 입력하기 (EM_REPLACESEL) (0) | 2010.06.30 |
---|---|
[Delphi] 폼의 클래스명 바꾸기 (0) | 2010.06.18 |
[Delphi] MD5 (TIdMessageDigest5) (0) | 2010.06.17 |
[Delphi] IdHTTP로 세션아이디를 포함하여 요청하기 (SessionID) (0) | 2010.06.17 |
[Delphi] TWebBrowser에서 세션아이디(SessionID) 가져오기 (0) | 2010.06.17 |