Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   In welchem Pfad läuft ein Prozess? (https://www.delphipraxis.net/198276-welchem-pfad-laeuft-ein-prozess.html)

Marco Steinebach 26. Okt 2018 21:40

AW: In welchem Pfad läuft ein Prozess?
 
Huhu Kodezwerg,
Code? Völlig langweilig:
Code:
  processExists (edit1.text, l, idx);
  memo1.lines.Add (format ('Name: %s', [edit1.text]));
  if l.count > 0 then
    memo1.lines.add (format ('Pfad: %s', [l[0]]))
  else
    memo1.lines.Add ('Pfad nicht ermittelt');
  l.free;
Einfach eine Form mit einem Edit für den Prozess-Namen, einem Memo für die Ausgabe und einem Button zum Test, dessen onClick-Methode oben steht.
Für z.B. Explorer.exe funktioniert das wunderbar, nur bei meinem ScreenReader weigert er sich.
Gibt's noch irgendwelche Flags oder so mit denen man rausfinden könnte, warum er sich bei denen weigert?
Viele Grüße
Marco

KodeZwerg 26. Okt 2018 22:25

AW: In welchem Pfad läuft ein Prozess?
 
Komisch, also wenn bei Dir Edit1.Text einen guten Namen wie "Explorer.exe" annimmt aber "xyz.exe" nicht, obwohl mein processlister "xyz.exe" anzeigen kann, da fällt mir nichts weiter zu ein.
Ich nutz identischen Code zum ermitteln der Prozesse, da passiert genau das gleiche, nur das ich in der Schleife alle Prozesse sammel und System-Prozesse gleich rauswerfe (die sind bei Dir noch enthalten), das ist der einzige Unterschied.

So hier müsste es klappen das bei systemprozessen du keine AV bekommst, habs grad nicht getestet, nur hier im editor.
Delphi-Quellcode:
function ProcessExists(const AFileName: WideString; var FoundFiles: TStringList; out HostIndex: Integer): Boolean;
var
  ContinueLoop: BOOL;
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
  fullPath: WideString;
  myPID: DWORD;
  OwnPID: Cardinal;
begin
  HostIndex := -1;
  FoundFiles := TStringList.Create;
  OwnPID := GetCurrentProcessId;
  FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
  Result := False;
  while Integer(ContinueLoop) <> 0 do
  begin
    Try
    if UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(ExtractFileName(AFileName)) then
    begin
      myPID := FProcessEntry32.th32ProcessID;
      fullPath := PidToFilename(myPID);
      FoundFiles.Add(fullPath);
      if myPID = OwnPID then
      begin
        HostIndex := FoundFiles.Count-1;
        Result := True;
      end;
    end;
    ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
    Except
      ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
    End;
  end;
  CloseHandle(FSnapshotHandle);
end;

HolgerX 27. Okt 2018 07:46

AW: In welchem Pfad läuft ein Prozess?
 
Hmm..



Zitat:

Zitat von KodeZwerg (Beitrag 1416829)

Dankeschön, sieht gut aus :thumb: werde ich fast so übernehmen, ich lass das var vorm nSize drinnen, Api sagt

Ich denke entweder

var nSize: DWORD

oder

nSize: PDWORD


(Beides liefert die Länge zurück)

aber

var nSize: PDWORD

dürfte doppelt gemoppelt sein ;)

KodeZwerg 27. Okt 2018 08:15

AW: In welchem Pfad läuft ein Prozess?
 
hab den pointer überlesen *whoops*, klar ohne.

Marco Steinebach 27. Okt 2018 19:25

AW: In welchem Pfad läuft ein Prozess?
 
Hallo zusammen,
Jep! Die "eingeschränkten Rechte" waren die Lösung.
Ich bin auch gerade darauf gestoßen, aber ihr wart schneller!
Vielen herzlichen Dank fürs Lösen helfen.
Herzliche Grüße
Marco


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:12 Uhr.
Seite 4 von 4   « Erste     234   

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