Geht es nur darum, zu einem einzelnen, festgelegten Programm den aktuellen Fenstertitel zu ermitteln, insofern dieses Programm gestartet worden ist ? Dann geht das auch wesentlich direkter, also ohne aufwändiges Filtern diverser Listen:
Code:
procedure TForm1.Button1Click(Sender: TObject);
var
PID: DWORD;
ExePath: string;
EnumInfo: TEnumInfo;
begin
// vor dem ButtonClick ein Explorerfenster öffnen
// oder hier ein anderes Programm eintragen und starten
ExePath := 'C:\WINXP\Explorer.exe';
PID := PathToPid(ExePath);
if PID = 0 then
begin
ShowMessage(Exepath + #13#10'Process not found!');
exit;
end;
EnumInfo := FindMainWindow(PID);
with EnumInfo do
ShowMessage(format('Exe: %s'#13#10 +
'ProcessID: %d'#13#10 +
'Window
Handle: %d'#13#10 +
'Window Class Name: %s'#13#10 +
'Window Title: "%s"', [ExePath, ProcessID, WindowHandle, ClassName, WindowTitle]));
end;
Kompletter Code im Anhang.
Komplizierter wird es allerdings etwas, wenn gleichzeitig mehrere Instanzen desselben Programms geladen sein sollten, da diese dann natürlich alle unterschiedliche PIDs und unterschiedliche Fensterhandles haben, wobei jede Instanz auch ihren eigenen Titel im sichtbaren Fenster aufweist.