AGB  ·  Datenschutz  ·  Impressum  







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

Pfad zur Exe von hProcess

Ein Thema von Neutral General · begonnen am 3. Jan 2007 · letzter Beitrag vom 3. Jan 2007
Antwort Antwort
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Pfad zur Exe von hProcess

  Alt 3. Jan 2007, 13:26
Hi,

Also den Dateinamen eines Prozesses habe ich jetzt herausgefunden... Aber ich bekomme halt nur sowas wie delphi32.exe... Ich bräuchte aber den ganzen Pfad..
Kann ich den irgendwie bekommen?

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
brechi

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

Re: Pfad zur Exe von hProcess

  Alt 3. Jan 2007, 13:34
das geht mit Module32First und szExeName (oder so)
funktioniert laut NicoDE aber nicht auf allen VMs

Oder meinst du nun wirklich einen Prozesshandle (hProcess) und nicht die ProzessId? Wie hast du denn vom Handle her den Dateinamen erhalten?
  Mit Zitat antworten Zitat
Benutzerbild von ErazerZ
ErazerZ

Registriert seit: 27. Mai 2005
Ort: Baden
315 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Pfad zur Exe von hProcess

  Alt 3. Jan 2007, 13:35
mittels TModuleEntry32 kannst du den Pfad auslesen (erstes Modul ist immer die *.exe Datei)
Delphi-Quellcode:
uses TlHelp32;

const
  ProcessId = 1684;
var
  ModuleEntry: TModuleEntry32;
  hModuleEntry: THandle;
  sPfad: String;
begin
  hModuleEntry := CreateToolHelp32Snapshot(TH32CS_SNAPMODULE, ProcessId);
  ModuleEntry.dwSize := SizeOf(TModuleEntry32);
  Module32First(hModuleEntry, ModuleEntry);
  sPfad := ModuleEntry.szExePath;
  CloseHandle(hModuleEntry);
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

Re: Pfad zur Exe von hProcess

  Alt 3. Jan 2007, 13:44
Habe diese Funktion aus einer anderen aus der DP abgeleitet:

Delphi-Quellcode:
function GetProcessExename(hProcess: THandle): String;
var hProcSnap: THandle;
    pe32: TProcessEntry32;
begin
  hProcSnap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
  if hProcSnap <> INVALID_HANDLE_VALUE then
  begin
    pe32.dwSize := SizeOf(TProcessEntry32);
    if Process32First(hProcSnap, pe32) = true then
    begin
      while Process32Next(hProcSnap, pe32) = true do
      begin
        if pe32.th32ProcessID = hProcess then
        begin
         Result := pe32.szExeFile;
         exit;
        end;
      end;
    end;
    CloseHandle(hProcSnap);
  end;
end;
Habe jetzt mal TModuleEntry32 genommen statt TProcessEntry32... Aber da bekomme ich nix zurück...

Die ID bekomm ich so:

GetWindowThreadProcessId(wnd,hProcess); Aber wie gesagt... Es funktioniert noch nicht so wies soll

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von ErazerZ
ErazerZ

Registriert seit: 27. Mai 2005
Ort: Baden
315 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Pfad zur Exe von hProcess

  Alt 3. Jan 2007, 13:53
wie wäre es damit?
Delphi-Quellcode:
function GetProcessExeName(hProcess: THandle): String;
var
  ModuleEntry: TModuleEntry32;
  hModuleEntry: THandle;
  ProcessId: Cardinal;
begin
  if hProcess = INVALID_HANDLE_VALUE then Exit;
  ProcessId := GetWindowThreadProcessId(hProcess);
  hModuleEntry := CreateToolHelp32Snapshot(TH32CS_SNAPMODULE, ProcessId);
  ModuleEntry.dwSize := SizeOf(TModuleEntry32);
  Module32First(hModuleEntry, ModuleEntry);
  Result := MOduleEntry.szExePath;
  CloseHandle(hModuleEntry);
end;
Edit: ah ne, diese funktion ließt nur aus dem eigenen Prozess aus
  Mit Zitat antworten Zitat
Benutzerbild von ErazerZ
ErazerZ

Registriert seit: 27. Mai 2005
Ort: Baden
315 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Pfad zur Exe von hProcess

  Alt 3. Jan 2007, 14:52
Delphi-Quellcode:
uses PsApi;

function GetProcessExeName(hProcess: THandle): String;
var
  lpBuffer: array[0..MAX_PATH -1] of Char;
begin
  ZeroMemory(@lpBuffer, SizeOf(lpBuffer));
  GetModuleFileNameEx(hProcess, 0, lpBuffer, SizeOf(lpBuffer));
  Result := String(lpBuffer);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  lpStartupInfo: TStartupInfo;
  lpProcessInformation: TProcessInformation;
begin
  ZeroMemory(@lpStartupInfo, sizeof(TStartupInfo));
  lpStartupInfo.cb := sizeof(TStartupInfo);
  lpStartupInfo.dwFlags := STARTF_USESHOWWINDOW;
  lpStartupInfo.wShowWindow := SW_SHOW;
  ZeroMemory(@lpProcessInformation, sizeof(TProcessInformation));
  CreateProcess(nil, 'notepad.exe', nil, nil, False, CREATE_NEW_CONSOLE, nil, nil, lpStartupInfo, lpProcessInformation);
  Application.MessageBox(PAnsiChar(GetProcessExeName(lpprocessinformation.hProcess)), 'Path', MB_ICONINFORMATION);
  TerminateProcess(lpProcessInformation.hProcess, 0);
  Application.Terminate;
end;
So, das funktioniert bei mir, aber halt nur mit PsApi und GetModuleFileNameEx (d.h. Requires Windows Vista, Windows XP, Windows 2000 Professional, or Windows NT Workstation 4.0.)
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:15 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