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:
Nur leider wird anstatt des Pfades nur folgende Meldung angezeigt:
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;
Code:
Was denk ich mal daran liegen wird, das hier ein WindowModule Handle erwartet wird und es aber ein Window Handle erhält.
Ein Aufruf einer Betriebssystemfunktion ist fehlgeschlagen.
Ein weiterer Versuch:
Delphi-Quellcode:
Jedoch war das von OpenProcess zurückgegeben Handle immer 0.
procId := GetWindowThreadProcessId(GetHandles(idx));
h := OpenProcess(PROCESS_ALL_ACCESS, false, procId); Nun weiß ich nicht wie ich am besten an den Dateinamen des Fensters herkankomme. Über Hilfe oder Alternativwege wäre ich dankbar :) Gruß pustekuchen |
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 |
AW: FileName via WindowHandle
Danke, hab gedacht das es evnt noch nen Weg gibt ohne die ganze Prozessliste durch zu gehen.
|
AW: FileName via WindowHandle
Ich wüsste aus dem Hut keine andere Möglichkeit, an den Namen zu kommen.
|
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? |
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 GetFileInformationByHandleEx. |
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