Registriert seit: 31. Mär 2012
160 Beiträge
|
AW: FindWindow von Pfad
3. Mai 2012, 16:21
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.
Sicher, das das mit Delphi7 funktioniert ?
Bei mir kommen dann diese Fehlermeldungen.
Delphi-Quellcode:
[Fehler] Unit1.pas(91): Undefinierter Bezeichner: ' TEnumInfo'
[Fehler] Unit1.pas(97): Undefinierter Bezeichner: ' PathToPid'
[Fehler] Unit1.pas(103): Undefinierter Bezeichner: ' FindMainWindow'
[Fehler] Unit1.pas(109): Undefinierter Bezeichner: ' ProcessID'
[Fehler] Unit1.pas(109): Undefinierter Bezeichner: ' WindowTitle'
[Fehler] Unit1.pas(112): ' .' erwartet, aber ' ;' gefunden
[Fataler Fehler] Project1.dpr(5): Verwendete Unit ' Unit1.pas' kann nicht compiliert werden
|
|
Zitat
|