(Co-Admin)
Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
Delphi 11 Alexandria
|
17. Jun 2003, 21:01
Moin Chris,
vielleicht hilft das hier ja weiter
Delphi-Quellcode:
// Diese Funktion ist selbst zu deklarieren.
// Wichtig ist die Aufrufkonvention stdcall
function EnumWindowsProc( const hWindow : DWORD; const AdwDummy : DWORD) : Longbool; stdcall;
var
pCaption : PChar; // Die Adresse eines Buffers, der den jeweiligen Fenstertitel aufnehmen soll
dwSize : DWORD; // Bufferlänge
begin
Result := true; // TRUE = weitermachen
// Nur sichtbare Fenster prüfen
if not IsWindowVisible(hWindow) then exit;
// Ermitteln, wie lang der Text des Fenstertitels ist
dwSize := SendMessage(hWindow,WM_GETTEXTLENGTH,0,0);
// Speicher für die auszulesende Caption reservieren + 1, wg. der terminierenden 0
pCaption := AllocMem(dwSize+1);
try
// Fenstertitel auslesen
// da als zweiter Parameter ein lParam erwartet wird, aber eine Adresse zu
// übergeben ist, findet hier eine Typumwandlung statt
SendMessage(hWindow,WM_GETTEXT,dwSize+1,lParam(pCaption));
// Fenstertitel anzeigen
// Hier kann dann auch die Prüfung stattfinden, ob das Handle des gesuchten Fensters
// an diese Funktion übergeben wurde, um damit anzustellen, was auch immer
// passieren soll.
// War es das richtige, dann kann man Result auf FALSE setzen, um anzuzeigen,
// das keine weiteren Fenster durchgegangen werden müssen
ShowMessage(pCaption);
finally
// Speicher wieder freigeben
FreeMem(pCaption,dwSize+1);
end;
end;
procedure FindAllWindows;
begin
// EnumWindows benötigt zum Aufruf nur die Adresse einer Funktion, an
// die die Fensterhandle aller Top-Level (Haupt-) fenster der Reihe
// nach wie Windows sie findet übergeben werden.
EnumWindows(@EnumWindowsProc,0);
end;
procedure TfrmMAIN.Button1Click(Sender: TObject);
begin
FindAllWindows;
end;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
|
|
Zitat
|