Einzelnen Beitrag anzeigen

Benutzerbild von mleyen
mleyen

Registriert seit: 10. Aug 2007
609 Beiträge
 
FreePascal / Lazarus
 
#7

Re: Desktop schließen/freigeben

  Alt 25. Okt 2007, 06:44
So liste ich mir die ganzen Prozesse (also die *.exe namen) in einer ListBox auf:

Delphi-Quellcode:
procedure TForm1.getAllProcesses;
var
  hSnap: THandle;
  ProcEntry: TProcessEntry32;
  s: String;
  begin
  hSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if (hSnap <> INVALID_HANDLE_VALUE) then
  begin
    ProcEntry.dwSize := SizeOf(ProcessEntry32);
    if (Process32First(hSnap, ProcEntry)) then
    begin
      s := ProcEntry.szExeFile;
      lb_Processes.Items.Clear;
      lb_Processes.Items.add(ExtractFileName(s));
      while Process32Next(hSnap, ProcEntry) do
      begin
        s := ProcEntry.szExeFile;
        lb_Processes.Items.add(ExtractFileName(s));
      end;
    end;
  end;
  CloseHandle(hSnap);
end;
Und bei auswahl eines Prozesses hohl ich mir dann vorerst so die Prozess-ID, um damit dann den Prozess zu killn:

Delphi-Quellcode:
function TForm1.getProcessID(Exename: string): DWORD;
var
  hProcSnap: THandle;
  pe32: TProcessEntry32;
begin
  result := 0;
  hProcSnap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
  if hProcSnap <> INVALID_HANDLE_VALUE then
  begin
    pe32.dwSize := SizeOf(ProcessEntry32);
    if Process32First(hProcSnap, pe32) = true then
    begin
      while Process32Next(hProcSnap, pe32) = true do
      begin
        if pos(Exename, pe32.szExeFile) <> 0 then
          result := pe32.th32ProcessID;
      end;
    end;
    CloseHandle(hProcSnap);
  end;
end;
Ich weiß, ist nicht die sauberste Lösung, aber für mich reicht es und das wichtigste: bisher funktionierts.
  Mit Zitat antworten Zitat