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 FileName via WindowHandle (https://www.delphipraxis.net/173505-filename-via-windowhandle.html)

pustekuchen 28. Feb 2013 15:05

FileName via WindowHandle
 
Hallo zusammen,

ich sitz da an einem kleinem Problemchen ;)

Ich frage mit der TWindowList Klasse alle Namen der offenen Fenster ab und trage sie in eine Liste ein. Nun möchte ich zusätzlich das Icon des Programms anzeigen, welches via Dateiname ermittelt werden soll. Um den Dateinamen zu ermitteln habe ich die Klasse um eine Property erweitert:

Delphi-Quellcode:
property FileNames[idx:Integer]:string read GetFileNames;
Delphi-Quellcode:
function TWindowList.GetFileNames(idx: Integer): string;
var
  szFileName: array[0..MAX_PATH] of Char;
begin
  FillChar(szFileName, SizeOf(szFileName), #0);
  if GetWindowModuleFileName(GetHandles(idx), szFileName, MAX_PATH) = 0 then
  begin
    RaiseLastOSError;
  end;
  result := szFileName;
end;
Nur leider wird anstatt des Pfades nur folgende Meldung angezeigt:
Code:
Ein Aufruf einer Betriebssystemfunktion ist fehlgeschlagen.
Was denk ich mal daran liegen wird, das hier ein WindowModule Handle erwartet wird und es aber ein Window Handle erhält.

Ein weiterer Versuch:
Delphi-Quellcode:
  procId := GetWindowThreadProcessId(GetHandles(idx));

  h := OpenProcess(PROCESS_ALL_ACCESS, false, procId);
Jedoch war das von OpenProcess zurückgegeben Handle immer 0.

Nun weiß ich nicht wie ich am besten an den Dateinamen des Fensters herkankomme.

Über Hilfe oder Alternativwege wäre ich dankbar :)

Gruß
pustekuchen

DeddyH 28. Feb 2013 15:09

AW: FileName via WindowHandle
 
Ich glaube zwar, in der DP gibt es schon entsprechenden Code, ich habe den aber nicht so schnell gefunden, dafür das hier.

Hth

pustekuchen 1. Mär 2013 07:11

AW: FileName via WindowHandle
 
Danke, hab gedacht das es evnt noch nen Weg gibt ohne die ganze Prozessliste durch zu gehen.

DeddyH 1. Mär 2013 07:21

AW: FileName via WindowHandle
 
Ich wüsste aus dem Hut keine andere Möglichkeit, an den Namen zu kommen.

SirThornberry 1. Mär 2013 12:25

AW: FileName via WindowHandle
 
Wenn OpenProcess 0 zurück gibt, schaue dir mal die Fehlermeldung an (GetLastError).
Ich vermute es liegt am PROCESS_ALL_ACCESS - brauchst du denn wirklich alle Rechte?

sx2008 1. Mär 2013 12:59

AW: FileName via WindowHandle
 
Von Microsoft gibt es eine ziemlich umständliche Lösung um anhand eines Filehandles den Dateinamen zu erhalten:
http://msdn.microsoft.com/en-us/library/aa366789.aspx
Ab Windows Vista gibt es MSDN-Library durchsuchenGetFileInformationByHandleEx.


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