Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Dateiname einer Anwendung wenn sie aktiviert wird.... (https://www.delphipraxis.net/73447-dateiname-einer-anwendung-wenn-sie-aktiviert-wird.html)

glkgereon 18. Jul 2006 12:20


Dateiname einer Anwendung wenn sie aktiviert wird....
 
Hi,

hmm...is was schwer zu erklären :-)

also ich möchte dass sich der User den Dateinamen einer beliebigen (laufenden) Anwendung angucken kann.
Das sollte imho so funktionieren:
Delphi-Quellcode:
procedure TForm_Settings.Chb_GetNextActiveWindowClick(Sender: TObject);
var H: HWND;
begin
  if not Chb_GetNextActiveWindow.Checked then
    begin //Zum Abbrechen
    H:=0;
    Exit;
    end;

  H:=Application.Handle;
  while H=Application.Handle do
    begin //Solange Eigenes Prog Aktiv
    if H=0 then Exit; //Abbruch
    Delay(250); //Codelib -> "Delay revisited"
    H:=GetActiveWindow;
    end;

 
  ShowMessage(GetProcessCmdLine(H)); //Aus der CodeLib

  Chb_GetNextActiveWindow.Checked:=False;
end;
tut es aber nicht :-(
Die Showmessage ist einfach leer.
ist GetProcessCmdLine einfach das falsche?
oder ist GetActiveWindow die falsche wahl?
oder ist mein ganzes Prinzip für die Tonne?

peanut 18. Jul 2006 15:54

Re: Dateiname einer Anwendung wenn sie aktiviert wird....
 
Hallo,

wieso lässt Du Dir nicht die PIDs auflisten und verwendest dann die folgende Funktion?

Delphi-Quellcode:
function GetExeNameByPID(pid: DWord): String;
var
  h: THandle;
begin
  Result := '';
  h := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, pid);
  if (h <> 0) then
  try
    SetLength(Result, MAX_PATH);
    ZeroMemory(@Result[1], MAX_PATH);
    SetLength(Result, GetModuleFileNameEx(h, 0, @Result[1], MAX_PATH));
  finally
    CloseHandle(h);
  end;
  Result := LowerCase(Result);
end;
Viele Grüße

peanut.

glkgereon 18. Jul 2006 15:55

Re: Dateiname einer Anwendung wenn sie aktiviert wird....
 
wie lasse ich mir denn die PID's auflisten?

peanut 18. Jul 2006 16:04

Re: Dateiname einer Anwendung wenn sie aktiviert wird....
 
Hallo

Delphi-Quellcode:
...
  hProcSnap: THandle;
  pe32     : TProcessEntry32;
...
  // Snapshot machen
  hProcSnap := CreateToolHelp32SnapShot(TH32CS_SNAPALL, 0);
  if (hProcSnap <> INVALID_HANDLE_VALUE) then
  begin
    pe32.dwSize := SizeOf(pe32);
    if (Process32First(hProcSnap, pe32) = True) then
    begin
      writeln(LowerCase(pe32.szExeFile)); // (*)
      while (Process32Next(hProcSnap, pe32) = True) do
        writeln(LowerCase(pe32.szExeFile)); // (*)
    end;
    CloseHandle(hProcSnap);
  end;
...
Siehe (*), in pe32.szExeFile steht schon der Dateiname drin :wink:
Die PIDs stehen aber auch in der pe32 Datenstruktur, falls Du die trotzdem noch benötigst...

glkgereon 19. Jul 2006 20:39

Re: Dateiname einer Anwendung wenn sie aktiviert wird....
 
das ist aber irgendwie nur der Dateiname...

ich bräuchte da noch den Pfad zu :duck:

Edit:
Das ist ja die Funktion dadrüber :duck:

peanut 19. Jul 2006 22:48

Re: Dateiname einer Anwendung wenn sie aktiviert wird....
 
Zitat:

Zitat von glkgereon
Das ist ja die Funktion dadrüber

Hatte vergessen, dass da nur der Dateiname steht. Wie Du richtig gesehen hast:

szEXE := LowerCase(GetExeNameByPID(pe32.th32ProcessID));

So sollte es dann funktionieren.

Gruß peanut.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:18 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