取得 process 的問題 |
答題得分者是:wameng
|
P.D.
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
請問各位,我有兩支function是用來取得process 及判斷 process中是否存在的的功能,但第一支以 TStringList取得所有Process的function 會執行到 Showmessage('1')中斷點(這是我加入除錯用的),但第二支不使用TStringList ,而是直接取得每一支Process名稱,請注意 ShowMessage('1')的位置,如果使用本支function, 這個中斷點並不會被執行到,我查了數天,測了很多方式就是找不出來問題點,只好請各位協助了,以下如 code
<textarea class="delphi" rows="10" cols="60" name="code">
function ListAllProcWnd(var SL: TStringList): TStringList;
var hSS: THandle ;
ppp: TProcessEntry32 ;
dwPID: DWORD ;
begin
GetWindowThreadProcessID(0,@dwPID);
hSS:= CreateToolhelp32Snapshot(TH32CS_SNAPProcess,dwPID);
if Process32First(hSS, ppp) then begin
showmessage('1');
// SL.Add(strpas(ppp.szExeFile)); --> 加入 [System Process] 字樣
while Process32Next(hSS,ppp) do SL.Add(strpas(ppp.szExeFile));
end ;
closeHandle(hSS);
result:= SL;
end; function FindProcWnd(exename: string): boolean;
var hSS: THandle;
ppp: TProcessEntry32;
dwPID: DWORD;
msl: string;
mrest: boolean;
i: integer;
begin
mrest:= False;
GetWindowThreadProcessID(0,@dwPID);
hSS:= CreateToolhelp32Snapshot(TH32CS_SNAPProcess,dwPID);
if Process32First(hSS, ppp) then begin
showmessage('1');
while Process32Next(hSS,ppp) do begin
msl:= AnsiUppercase(strpas(ppp.szExeFile));
if msl=exename then begin
mrest:= True;
break;
end;
end;
end;
closeHandle(hSS);
{ for i:= 0 to SL.Count-1 do begin
msl:= ansiuppercase(SL.Strings[i]);
if msl=exename then begin
mrest:= True;
break;
end;
end;
}
result:= mrest;
end;
</textarea>
|
wameng
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|
wameng
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
<textarea cols="60" rows="10" class="delphi" name="code"> function FindProc(ProcName: string): Boolean;
var
OK: Bool;
hPL: THandle;
ProcessStruct: TProcessEntry32;
begin
Result := False;
hPL := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
ProcessStruct.dwSize := SizeOf(TProcessEntry32);
OK := Process32First(hPL, ProcessStruct);
while OK do
begin
if UpperCase(ProcessStruct.szExeFile) = UpperCase(ProcName) then
begin
Result := True;
end;
OK := Process32Next(hPL, ProcessStruct);
end;
CloseHandle(hPL);
end;
</textarea>
|
P.D.
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |