(1)显示进程列表: procedure TForm1.Button2Click(Sender: TObject); var lppe: TProcessEntry32; found : boolean; Hand : THandle; P:DWORD; s:string; begin ListBox1.Items.Clear ; Hand := CreateToolhelp32Snapshot(TH32CS_SNAPALL,0); found := Process32First(Hand,lppe); while found do begin s := StrPas(lppe.szExeFile); if lppe.th32ProcessID>0 then p := lppe.th32ProcessID else p := 0; ListBox1.Items.AddObject(s,pointer(p));//列出所有进程。 found := Process32Next(Hand,lppe); end; end;
(2)杀死某进程: procedure TForm1.Button3Click(Sender: TObject); var lppe: TProcessEntry32; found : boolean; Hand : THandle; P:DWORD; sExeFile,sSelect:string; killed:boolean; begin p :=DWORD(ListBox1.Items.Objects[ListBox1.itemindex]); if P<>0 then begin killed := TerminateProcess(OpenProcess(PROCESS_TERMINATE,False,P),$FFFFFFFF); if not killed then messagebox(self.handle,pchar(sExeFile+'无法杀死!'),'提示',MB_OK or MB_ICONWARNING) else ListBox1.Items.Delete(ListBox1.ItemIndex); end; end;
(3)取得某进程EXE路径: procedure TForm1.Button8Click(Sender: TObject); //uses PSAPI; var h:THandle; fileName:string; iLen:integer; hMod:HMODULE;cbNeeded,p:DWORD; begin p :=DWORD(ListBox1.Items.Objects[ListBox1.itemindex]); h := OpenProcess(PROCESS_ALL_ACCESS, false, p); //p 为 进程ID if h > 0 then begin if EnumProcessModules( h, @hMod, sizeof(hMod), cbNeeded) then begin SetLength(fileName, MAX_PATH); iLen := GetModuleFileNameEx(h, hMod, PCHAR(fileName), MAX_PATH); if iLen <> 0 then begin SetLength(fileName, StrLen(PCHAR(fileName))); ShowMessage(fileName); end; end; CloseHandle(h); end; end;
(4)取得窗口列表: begin ListBox1.Items.Clear ; EnumWindows(@EnumWindowsProc, 0); end;
(5)杀死窗口进程: procedure TForm1.Button6Click(Sender: TObject); var H:THandle; P:DWORD; s:string; killed:boolean; begin s := ListBox1.Items[ListBox1.ItemIndex]; H:=FindWindow(nil,pchar(s)); if H<>0 then begin GetWindowThreadProcessId(H,@P); if P<>0 then killed:=TerminateProcess(OpenProcess(PROCESS_TERMINATE,False,P),$FFFFFFFF); if not killed then messagebox(self.handle,pchar(s+'无法杀死!'),'提示',MB_OK or MB_ICONWARNING) else ListBox1.Items.Delete(ListBox1.ItemIndex); end; end;
(6)取得窗口进程路径: procedure TForm1.Button9Click(Sender: TObject); var H:THandle; P,cbNeeded: DWORD; s,fileName:string; iLen:integer; hMod:HMODULE; begin s := ListBox1.Items[ListBox1.ItemIndex]; H:=FindWindow(nil,pchar(s));
if H<>0 then begin GetWindowThreadProcessId(H,@P); if P<>0 then begin h := OpenProcess(PROCESS_ALL_ACCESS, false, p); //p 为 进程ID if h > 0 then begin if EnumProcessModules( h, @hMod, sizeof(hMod), cbNeeded) then begin SetLength(fileName, MAX_PATH); iLen := GetModuleFileNameEx(h, hMod, PCHAR(fileName), MAX_PATH); if iLen <> 0 then begin SetLength(fileName, StrLen(PCHAR(fileName))); ShowMessage(fileName); end; end; CloseHandle(h); end; end; end; end;
(8)判断程序是否在运行: procedure TForm1.Button5Click(Sender: TObject); var PrevInstHandle:Thandle; AppTitle:pchar; begin AppTitle := pchar('test'); PrevInstHandle := FindWindow(nil, AppTitle); if PrevInstHandle <> 0 then begin if IsIconic(PrevInstHandle) then ShowWindow(PrevInstHandle, SW_RESTORE) else BringWindowToTop(PrevInstHandle); SetForegroundWindow(PrevInstHandle); end; end;