type
TWaechter =
class(TObject)
private
{ Private-Deklarationen }
TZeitgeber : TTimer;
function EnumWindowsProc(
const hWindow : DWORD;
const AdwDummy : DWORD) : Longbool;
stdcall;
procedure TZeitgeberOntimer(Sender : TObject);
procedure kontrolle(text:pchar);
public
constructor create;
destructor destroy;
procedure einstellungen;
procedure enabled (res : boolean);
{ Public-Deklarationen }
end;
var
liste :
array of String;
implementation
function TWaechter.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
if (pcaption^ <> '
')
then
kontrolle(pcaption);
finally
// Speicher wieder freigeben
FreeMem(pCaption,dwSize+1);
end;
end;
procedure TWaechter.TZeitgeberOntimer(Sender : TObject);
begin
EnumWindows(@EnumWindowsProc, 0);
end;
procedure TWaechter.kontrolle(text:pchar);
var i :integer;
bo : boolean;
begin
//Weitere Verarbeitungen mit dem Namen des Fensters
end;
constructor TWaechter.create;
begin
TZeitgeber := TTimer.create(
nil);
with TZeitgeber
do
begin
interval := 500;
onTimer := TZeitgeberOnTimer;
enabled := false;
end;
SetLength(liste, 0);
end;
destructor TWaechter.destroy;
begin
SetLength(liste, 0);
end;
procedure TWaechter.enabled(res: boolean);
begin
TZeitgeber.enabled := res;
end;
end.