AGB  ·  Datenschutz  ·  Impressum  







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

In welchem Pfad läuft ein Prozess?

Ein Thema von Marco Steinebach · begonnen am 19. Okt 2018 · letzter Beitrag vom 27. Okt 2018
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Marco Steinebach

Registriert seit: 4. Aug 2006
502 Beiträge
 
Delphi 5 Enterprise
 
#1

In welchem Pfad läuft ein Prozess?

  Alt 19. Okt 2018, 13:22
Hallo zusammen,
gibt es keine Möglichkeit, auf einfache weise, folgendes herauszufinden:
ist eine Exe gestartet? (ich weiß nicht, ob die immer ein Window-Handle hat).
Wenn ja, in welchem Pfad liegt sie?
Ich will eigentlich nicht erst noch groß ToolHelp oder sonstwas installieren, das muß doch auch mit Bordmitteln gehen?
Ich will auch nix ändern sondern nur wissen, ob mein Screenreader (jfw.exe) läuft und wenn ja, in welchem Verzeichnis sie liegt.
Ich bräuchte mal 'n tip, bitte!

Herzliche Grüße
Marco
Marco Steinebach
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

AW: In welchem Pfad läuft ein Prozess?

  Alt 19. Okt 2018, 13:24
Das wäre ein Anfang: https://docs.microsoft.com/en-us/win...help32snapshot
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#3

AW: In welchem Pfad läuft ein Prozess?

  Alt 19. Okt 2018, 13:42
Ich verwende für sowas gerne die madCollection. Damit lässt sich das ganz einfach ermitteln: http://help.madshi.net/Processes.htm#IProcess
Delphi-Quellcode:
// Example:
Process('explorer.exe').ExeFile -> 'C:\Windows\Explorer.exe'
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: In welchem Pfad läuft ein Prozess?

  Alt 19. Okt 2018, 14:35
Mit folgender funktion hast Du 2 Ergebnisse auf einmal, wenn TRUE dann ist es im selben Verzeichnis gestartet, wenn Count > 0 dann kannst Du alle geladenen Prozesse mit gleichen Dateinamem abrufen.
Sorry aber ein paar uses braucht man schon dafür.
Delphi-Quellcode:
uses TlHelp32, PsAPI;

{*
*  Procedure : KillProcess
*  Author    : Michael Puff
*  Date      : 2006-09-15
*  Terminates a process identified by its PID
*}

function KillProcess(dwProcID, Wait: DWORD): Integer;
var
  hProcess : Cardinal;
  dw : DWORD;
begin
  // open the process and store the process-handle
  hProcess := OpenProcess(SYNCHRONIZE or PROCESS_TERMINATE, False, dwProcID);
  // kill it
  if hProcess <> 0 then
  begin
    dw := Integer(TerminateProcess(hProcess, 1));
    if dw <> 0 then
    begin
      // TerminateProcess returns immediately, so we have to verify the result via
      // WaitForSingleObject
      dw := WaitForSingleObject(hProcess, Wait);
      if dw = WAIT_FAILED then
        dw := GetLastError;
    end
    else // TerminateProcess = 0
      dw := GetLastError;
    CloseHandle(hProcess);
  end
  else // hProcess = INVALID_HANDLE_VALUE
    dw := GetLastError;
  result := dw;
end;

function ProcessExists(const AFileName: string; var FoundFiles: TStringList; const IncludeHost: Boolean = False; const Kill: Boolean = False): Boolean;
var
  ContinueLoop: BOOL;
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
  fullPath: string;
  myHandle: THandle;
  myPID: DWORD;
  OwnPID: Cardinal;
begin
  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
    if UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(ExtractFileName(AFileName)) then
    begin
      myPID := FProcessEntry32.th32ProcessID;
        if (Kill = True) then
          if (OwnPID <> myPID) then
            KillProcess(myPID, 500); // Wenn Du hier noch eine Null ranhängst, gibst Du der Kill Funktion 5 Sekunden Zeit zum Abschluss zu kommen
      myHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, myPID);
      if myHandle <> 0 then
      try
        SetLength(fullPath, MAX_PATH);
        if GetModuleFileNameEx(myHandle, 0, PChar(fullPath), MAX_PATH) > 0 then
        begin
          SetLength(fullPath, StrLen(PChar(fullPath)));
          if UpperCase(ExtractFilename(fullPath)) = UpperCase(ExtractFilename(AFileName)) then
            if (IncludeHost=False) then
              begin
                if (OwnPID <> myPID) then
                  FoundFiles.Add(fullPath);
              end
              else
                FoundFiles.Add(fullPath);
          if UpperCase(fullPath) = UpperCase(AFileName) then
            Result := True;
        end else
          fullPath := '';
      finally
        CloseHandle(myHandle);
      end;
      {if Result then
        Break;}

    end;
    ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
  end;
  CloseHandle(FSnapshotHandle);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  s: TStringList;
  i: Integer;
begin
  Memo1.Clear;
  processExists(Application.ExeName,S, Checkbox1.Checked, Checkbox2.Checked);
  for i := 0 to S.Count -1 do
    Memo1.Lines.Add(S.Strings[i]);
end;
/edit
nun ist noch eine Abfrage enthalten ob der Host-Prozess berücksichtigt werden soll, nur bei TRUE ist der in der Liste enthalten.

/edit
nun kann es alle "nicht-Hosts" auch killen
Gruß vom KodeZwerg

Geändert von KodeZwerg (19. Okt 2018 um 20:18 Uhr) Grund: added feature
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: In welchem Pfad läuft ein Prozess?

  Alt 19. Okt 2018, 17:03
Ich verwende für sowas gerne die madCollection. Damit lässt sich das ganz einfach ermitteln: http://help.madshi.net/Processes.htm#IProcess
Delphi-Quellcode:
// Example:
Process('explorer.exe').ExeFile -> 'C:\Windows\Explorer.exe'
Hallo Uwe, Klasse Tipp von Dir (wie gewohnt ), ich habe mich da mal umgeschaut, die IProcesses Methode würde da dann wohl eher zu tragen kommen (TE meinte was das mehrere Instanzen vorhanden sein könnten), ich hoffe den Source dazu kann man einsehen, der würde mich schon Interessieren, schaut sehr lecker aus.

An TE:
Vielleicht wäre es auch besser eine "OnlyOneInstance" funktionalität Deinem Programm beizubringen? Das würde jedenfalls diese Prozess Suche abkürzen und eher zutreffend sein. Vielleicht mit einem MUTEX in .DPR?
Je nach dem was man erreichen will.
Inhaltlich hast Du auf jedenfall zwei gute Lösungen die Dir alle Prozesse mit gewünschtem Dateinamen auflisten könnten.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#6

AW: In welchem Pfad läuft ein Prozess?

  Alt 19. Okt 2018, 17:08
ich hoffe den Source dazu kann man einsehen, der würde mich schon Interessieren, schaut sehr lecker aus.
Gegen einen kleinen Obolus gibt es auch die Sourcen: http://www.madshi.net/madExceptShop.htm
Das Geld ist aber definitiv gut angelegt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#7

AW: In welchem Pfad läuft ein Prozess?

  Alt 19. Okt 2018, 17:33
Klein würde ich den Obolus nicht nennen.
Die Mehrwertsteuer kommt noch oben drauf. Die 159€ die da stehen sind nur zum anlocken da.

Geändert von DieDolly (19. Okt 2018 um 17:37 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: In welchem Pfad läuft ein Prozess?

  Alt 19. Okt 2018, 17:55
LOL madExcept 4.0.20, nein das wollte ich nicht kaufen (ich bin bei der Konkurenz seit Jahren, vielleicht haben die ja was ähnliches, so intern habe ich mich damit noch nicht viel beschäftigt, EurekaLog ist verbaut in Version 7, seit dem hat CRC ne macke, na egal, alles wird gut^^)

für Interessierte, ich habe da oben noch ne Host-Prozess ability eingepflanzt damit eben dieser nicht in der Liste erscheint, ich weiß ja noch nicht was der TE mit dieser Information anfängt (eine Dateiliste zu einem Dateinamen)
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: In welchem Pfad läuft ein Prozess?

  Alt 19. Okt 2018, 20:16
Ebenfalls von Moderator Luckie dieses Mutex Beispiel, falls es darauf hinaus laufen sollte.

Oben wäre nun auch eine TerminateProcess funktion enthalten
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

AW: In welchem Pfad läuft ein Prozess?

  Alt 19. Okt 2018, 21:21
Da gräbt jetzt aber einer in meiner dunklen Vergangenheit.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 07:42 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