問題描述:
下面的壹段代碼中是找到系統中的所有進程,然後檢測是否有自己感興趣的進程存在,我看不明白的是壹直沒有看到其中有“感興趣”的進程的變量,那怎麽會對比檢測出來是否存在呢,請各位大蝦指教!(聲明,下面這段代碼是沒有問題的,正在正常使用,小第看不明白)
ction FindProc(ProcName: string): boolean; 找進程是否有**進程
var
OK: Bool;
hPL, hML: THandle;
ProcessStruct: TProcessEntry32;
ModuleStruct: TModuleEntry32;
begin
Result := False;
hPL := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0); 創建當前內存的壹個快照,將返回的句柄傳遞給Process32First
再用OpenProcess打開這個進程,從而獲得該進程的進程句柄。最後,利用這個句柄,使用ReadProcessMemory
ProcessStruct.dwSize := SizeOf(TProcessEntry32);
OK := Process32First(hPL, ProcessStruct);
while OK do
begin
if UpperCase(ProcessStruct.szExeFile) = UpperCase(ProcName) then 查看進程名是不是某個感興趣的進程
begin
Result := True;
find path info
hML := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, ProcessStruct.th32ProcessID);
ModuleStruct.dwSize := SizeOf(TModuleEntry32);
Module32First(hML, ModuleStruct);
if hML > 0 then
begin
uzei:= ModuleStruct.szExePath;
end;
CloseHandle(hML);
end;
OK := Process32Next(hPL, ProcessStruct);
end;
解析:
所謂的感興趣的進程,僅僅是指定了壹個進程名
通過函數傳入該名稱,然後用進程快照去比較罷了
if UpperCase(ProcessStruct.szExeFile) = UpperCase(ProcName) then
這句代碼已經比較了從快照中取出的進程名與妳感興趣的進程名
如果相同,則快照中的進程中妳感興趣的
也許妳看不懂的是進程入口之類的東西,那些都是由API決定的
妳記下就行