過長的處理程序名稱會被截掉 |
尚未結案
|
ju1977
一般會員 發表:9 回覆:9 積分:3 註冊:2002-07-16 發送簡訊給我 |
|
chris_shieh
高階會員 發表:46 回覆:308 積分:240 註冊:2004-04-26 發送簡訊給我 |
|
ju1977
一般會員 發表:9 回覆:9 積分:3 註冊:2002-07-16 發送簡訊給我 |
|
chris_shieh
高階會員 發表:46 回覆:308 積分:240 註冊:2004-04-26 發送簡訊給我 |
既然你可以確定執行檔名
並不一定要使用kill by title
title 只是取得Process Handle / window handle的途徑之一 直接利用該檔名(影像名稱)取得其Process Handle
一樣可以TerminateProcess 以下這些函式可以參考
【Delphi】【發表】Program Name、PID、Window Handle、hProcess 的轉換函式
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=61654
function GetPIDByProgramName(const APName: string; bWithOutPath: Boolean = True): THandle; var isFound: boolean; AHandle, AhProcess: THandle; ProcessEntry32: TProcessEntry32; APath: array[0..MAX_PATH] of char; begin try Result := 0; AHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); ProcessEntry32.dwSize := Sizeof(ProcessEntry32); isFound := Process32First(AHandle, ProcessEntry32); while isFound do begin AhProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, false, ProcessEntry32.th32ProcessID); GetModuleFileNameEx(AhProcess, 0, @APath[0], sizeof(APath)); if (UpperCase(StrPas(APath)) = UpperCase(APName)) or (UpperCase(StrPas(ProcessEntry32.szExeFile)) = UpperCase(APName)) or (bWithOutPath and ( (UpperCase(ExtractFileName(StrPas(APath))) = UpperCase(ExtractFileName(APName))) or //for partial filename without path (UpperCase(ExtractFileName(StrPas(ProcessEntry32.szExeFile))) = UpperCase(ExtractFileName(APName))) ) ) then //for partial filename without path begin Result := ProcessEntry32.th32ProcessID; break; end; isFound := Process32Next(AHandle, ProcessEntry32); CloseHandle(AhProcess); end; finally CloseHandle(AHandle); end; end; function GetProcessHndByPID(const hAPID: THandle): THandle; var AhProcess: THandle; begin if hAPID <> 0 then begin AhProcess := OpenProcess(PROCESS_ALL_ACCESS, false, hAPID); Result := AhProcess; //Only close Handle on finish operation, CloseHandle would make the AhProcess not available end else Result := 0; end; function GetProcessHndByProgramName(const APName: string; bWithOutPath: Boolean = True): THandle; begin if APName <> '' then Result := GetProcessHndByPID(GetPIDByProgramName(APName)) else Result := 0; end; procedure TForm1.Button1Click(Sender: TObject); var hProcess:THandle; begin hProcess:=GetProcessHndByProgramName('notepad.exe', False); if hProcess>0 then TerminateProcess(hProcess,0); end;@瞭解越多.懂得越少@ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |