AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Prozesspfad herausfinden

Offene Frage von "Palad"
Ein Thema von Palad · begonnen am 27. Jul 2007 · letzter Beitrag vom 19. Aug 2009
Antwort Antwort
Seite 1 von 2  1 2      
Palad

Registriert seit: 6. Feb 2007
Ort: Berlin
4 Beiträge
 
Delphi 2005 Personal
 
#1

Prozesspfad herausfinden

  Alt 27. Jul 2007, 19:29
Hallo liebe DPler,

ich habe eine Frage wegen einer meiner Programme, die ihr mir hoffentlich beantworten könnt. Vorneweg, ich bin mit der Windows-API ziemlich ungeschickt, oder treffender: Ich habe keine Ahnung davon. Nun zum Problem.

Ich würde gerne eine Art Protokollprogramm erstellen, das alle, beipspielsweise, 5 Minuten die laufenden Prozesse ermittelt, die entsprechende Liste filtert (bekannt/unbekannt) und am Ende alles schön säuberlich in eine .log-Datei wirft. Soweit kein Problem, aber ich möchte für die nicht bekannten Prozesse noch Programmpfad herausfinden, damit der Anwender bessere Chancen hat herauszufinden, um welches Programm es gerade geht. Das geht ja oft aus dem Prozessnamen nicht hervor.

Um die laufenden Prozesse zu ermitteln habe ich mich folgender Prozedur bedient, wobei ich zugeben muss, dass ich diese von Delphi-Source habe, da ich damit nicht so wirklich zurande kommen würde:

Delphi-Quellcode:
procedure TFrmAnsicht.GetProcessList(const aProcessList: TStrings);
var Snap: THandle;
    ProcessE: TProcessEntry32;
begin
  aProcessList.Clear;
  Snap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  try
    ProcessE.dwSize := SizeOf(ProcessE);
    if Process32First(Snap, ProcessE) then
      Repeat aProcessList.Add(ProcessE.szExeFile);
      Until not Process32Next(Snap, ProcessE)
    else RaiseLastOSError;
  finally
    CloseHandle(Snap);
  end;
end;
Ich bedanke mich schonmal für eure Hilfe, Palad



PS: Ich bei Delphi-Source auch schon die Frage gepostet forum.dsdt.info/viewtopic.php?t=33998
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#2

Re: Prozesspfad herausfinden

  Alt 27. Jul 2007, 19:57
Delphi-Quellcode:

modh := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, ProcessE.ProcessID);
if (modh <> 0) then
begin
  if Modul32First(modh, ModuleE) then
    //ModuleE.szExeName ist die Exe mit Pfad)
  CloseHandle(modh);
end;
wobei modh ein THandle ist und ModuleE en TModuleEntry32

die funktion einfach nach an den beginn der repeat schleife packen (hoffe da ist kein fehler drin, habs ausm kopf geschrieben)
  Mit Zitat antworten Zitat
Palad

Registriert seit: 6. Feb 2007
Ort: Berlin
4 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Prozesspfad herausfinden

  Alt 27. Jul 2007, 20:25
Es klappt (fast) mit deinem Code! Bis auf 2 Dinge die ich verändern musste, zum einen scheint es bei modh:=Create...(..., ProcessE.th32ProcessID) heißen zu müssen [habe einfach die entsprechende Unit durchgesehen] und ModuleE.szExePath, aber du hast mir riesig geholfen! Dankesehr, ich weiß das wirklich zu schätzen!

Delphi-Quellcode:
procedure TFrmAnsicht.GetProcessList(const aProcessList: TStrings);
var Snap: THandle;
    ProcessE: TProcessEntry32;
    modh: THandle;
    ModuleE: TModuleEntry32;
begin
  aProcessList.Clear;
  Snap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  try
    ProcessE.dwSize := SizeOf(ProcessE);
    if Process32First(Snap, ProcessE) then
      Repeat
      begin
// hier beginnen die Änderungen
        modh:=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, ProcessE.th32ProcessID);
        if (modh <> 0) then
        begin
           if Module32First(modh, ModuleE) then Memo1.Lines.Add(ModuleE.szExePath);
           CloseHandle(modh);
          end;
// Änderungen Ende.
        aProcessList.Add(ProcessE.szExeFile);
      end;
      Until not Process32Next(Snap, ProcessE)
    else RaiseLastOSError;
  finally
    CloseHandle(Snap);
  end;
end;

Viele Grüße, Palad
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Prozesspfad herausfinden

  Alt 8. Aug 2009, 10:55
Der Code ist echt super!
Zwei Kleinigkeiten musste ich aber noch ändern. Zum einen war mind. ein begin end; zuviel. Zum anderen wird einmal ein Add nicht zu aProcessList, sondern zu Memo.Lines gemacht.

Den alten Thread greife ich wieder auf, weil ich trotzdem noch zwei Fragen habe:
  • Warum sehe ich nicht soviel Prozesse, wie mir im Taskmanager angezeigt werden?
  • Warum ist mein Programm selbst immer doppelt drin?

Gruß und Dank, Alex
Alex Winzer
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Prozesspfad herausfinden

  Alt 8. Aug 2009, 10:57
Welche Prozesse fehlen denn? Eventuell fehlen dir für bestimmte Prozesse die nötigen Rechte.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Prozesspfad herausfinden

  Alt 8. Aug 2009, 21:01
Danke für die Antwort!

Zitat von Luckie:
Welche Prozesse fehlen denn?
Es fehlen z.B.:
  • alg.exe <- Antivir
  • avgnt.exe <- Antivir
  • avguard.exe <- Antivir
  • BRSS01A.EXE <- Druckertreiber
  • BRSVC01A.EXE <- Druckertreiber
  • csrss.exe <- keine Ahnung
  • ctfmon.exe <- ZoneAlarm
  • zlclient.exe <- ZoneAlarm
u.s.w.

Der Taskmanager zeigt mir 38 Prozesse mit exe-Dateien an. Mit der Procedur bekomme ich nur 8 angezeigt. Davon ist mein Programm selbst - warum auch immer - doppelt.

Zitat von Luckie:
Eventuell fehlen dir für bestimmte Prozesse die nötigen Rechte.
Wohl kaum. Ich mache das, was man eigentlich nicht machen sollte. Ich bin immer als Admin angemeldet!

Andere Ideen?
Alex Winzer
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Prozesspfad herausfinden

  Alt 8. Aug 2009, 21:58
Das sind alles Systemprozesse.

Und auch als Administrator ist man nicht allmächtig.

PS: ctfmon.exe gehört zu Office und dient der Spracherkennung von texten oder so.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Guido Eisenbeis

Registriert seit: 9. Apr 2006
389 Beiträge
 
Delphi 10.3 Rio
 
#8

Re: Prozesspfad herausfinden

  Alt 15. Aug 2009, 07:16
Hab den Code von Palad mal ein wenig "bereinigt" und übersichtlicher gestaltet:

Delphi-Quellcode:
uses
  Tlhelp32;

procedure GetProcessList(const aProcessList: TStrings);
var
  Snap: THandle;
  ProcessE: TProcessEntry32;
  modh: THandle;
  ModuleE: TModuleEntry32;
begin
  aProcessList.Clear;
  Snap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if (Snap <> INVALID_HANDLE_VALUE) then
  begin
    try
      ProcessE.dwSize := SizeOf(ProcessE);
      if Process32First(Snap, ProcessE) then
        Repeat
          aProcessList.Add(ProcessE.szExeFile);

          modh := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, ProcessE.th32ProcessID);
          if (modh <> INVALID_HANDLE_VALUE) then
          begin
            try
              ModuleE.dwSize := SizeOf(ModuleE);
              if Module32First(modh, ModuleE) then
// repeat // <- wer's gerne noch ausfuerlicher will
                  aProcessList.Add(ModuleE.szExePath)
// until not Module32Next(modh, ModuleE)
              else
                RaiseLastOSError;
            finally
              CloseHandle(modh);
            end;
          end;
        Until not Process32Next(Snap, ProcessE)
      else
        RaiseLastOSError;
    finally
      CloseHandle(Snap);
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  GetProcessList(Memo1.Lines);
end;
Guido.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Prozesspfad herausfinden

  Alt 15. Aug 2009, 08:25
Zitat:
Wohl kaum. Ich mache das, was man eigentlich nicht machen sollte. Ich bin immer als Admin angemeldet!
Trotzdem laufen die Systemdienste in einem anderen Benutzerkontext. Wenn du den Haken bei "Prozesse anderer Benutzer" im Taskmanager nicht setzt, siehst du standardmässig auch nur die Prozesse in deinem Benutzerkontext.
Markus Kinzler
  Mit Zitat antworten Zitat
aegidos

Registriert seit: 30. Okt 2007
40 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Prozesspfad herausfinden

  Alt 19. Aug 2009, 13:27
Hy,
Was muss man in der uses Direktive denn ergänzen dass der Code läuft?
Bei mir wird:
TProcessEntry32 und CreateToolHelp32SnapShot unterringelt.

Da hab ich doch bestimmt was vergessen einzubinden?

Danke !!!!
Grüße
Andi
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz