![]() |
Active Window on change?
Guten Tag,
wenn das Betribssystem gestartet ist, ist doch immer ein Window aktive oder? Also wenn ich zum Beispiel Word im Vordergrund hab ist mein Aktiv Window => Word. Gibt es jetzt eine Befehl/Funktion die einem immer das aktive Window in einem Edit Feld o.Ä. ausgibt? Hab dazu leider nichts gefunden. MFG MaToBe |
Re: Active Window on change?
Hallo
Am einfachsten geht's wohl in einem Timer GetForegroundWindow aufzurufen und dann den Text des aktiven Fensters mit GetWindowText zu ermitteln. |
Re: Active Window on change?
Delphi-Quellcode:
habs mal so versucht, allerdings stimmen die Parameter von GetWindowText nicht ?!?
procedure TMainForm.TActiveWindowTimer(Sender: TObject);
begin GetForegroundWindow; WindowText := GetWindowText(GetForegroundWindow, nil, nil); if WindowText <> WindowText2 then begin Memo1.SelText:= WindowText; WindowText2 := WindowText; end; end; und noch ne Frage in der Hilfe steht das "GetWindowText" einen Integerwert zurückliefert. Aber ich will doch wissen wie das Fenster heißt als z.B. Mozilla Firefox oder Notepad oder so . |
Re: Active Window on change?
Versuch es mal so:
Delphi-Quellcode:
procedure TMainForm.TActiveWindowTimer(Sender: TObject);
var Wnd: HWND; sTitle: string; begin Wnd := GetForegroundWindow; if Wnd <> 0 then begin SetLength(sTitle,GetWindowTextLength(Wnd)); GetWindowText(Wnd,PChar(sTitle),Length(sTitle)); Memo1.SelText := sTitle; end; end; |
Re: Active Window on change?
Delphi-Quellcode:
Danke an DeddyH für den Code.
procedure TMainForm.TActiveWindowTimer(Sender: TObject);
var Wnd: HWND; sTitle: string; begin Wnd := GetForegroundWindow; if Wnd <> 0 then begin SetLength(sTitle,GetWindowTextLength(Wnd)); GetWindowText(Wnd,PChar(sTitle),Length(sTitle)); AktivesFenster := sTitle; end; if AktivesFenster <> AktivesFenster2 then begin Memo1.SelText := (' <<<' + AktivesFenster + '>>> '); AktivesFenster2 := AktivesFenster; end; end; Habe es jetzt so gemacht, allerdings wird im Memo (oder auch im ShowMessage (habs mal im ShowMessage getestet)) nicht der vollständige Titel angegeben. Es fehlt immer der letze Buchstabe + die 3 > ?!? zB Fenstertitel = Word => Ausgabe = <<<Wor |
Re: Active Window on change?
Dann reservier mal ein Byte mehr Speicher, die Hilfe war da nicht ganz eindeutig:
Delphi-Quellcode:
So besser?
SetLength(sTitle,GetWindowTextLength(Wnd) + 1);
|
Re: Active Window on change?
ja jetzt nimmt er immer den ganzen Fenster Titel.
Allerdings versteh ich jetzt noch weniger... denn jetzt Schreibt er statt (Notepad => <<<Notepad). warum werden die andern 3 >>> nicht ausgegeben? Das hat doch jetzt mit dem Fenstertitel ansich gar nichts mehr zu tun oder?? Ah und nochwas, ich hab mir gerade mal die Ankündigungen durchgelesen und nun hab ich bedenken, dass ich einigen hier vielleicht auf den Wecker gehn könnte mit meiner ständigen Fragerei. Allerdings weiß ich leider nicht wie ich solche Sachen anders herausbekommen kann, denn im Schulunterricht machen wir leider solche Programme nicht. |
Re: Active Window on change?
Zitat:
Delphi-Quellcode:
Hier nimmt er " <<<Notepad>>> " an.
procedure TMainForm.TActiveWindowTimer(Sender: TObject);
var Wnd: HWND; sTitle: string; begin Wnd := GetForegroundWindow; if Wnd <> 0 then begin SetLength(sTitle,GetWindowTextLength(Wnd) + 1); GetWindowText(Wnd,PChar(sTitle),Length(sTitle)); AktivesFenster := sTitle; end; if AktivesFenster <> AktivesFenster2 then begin Memo1.SelText := (' <<<' + AktivesFenster); Memo1.SelText := ('>>> '); AktivesFenster2 := AktivesFenster; end; end; Ich lass es jetzt einfach so, aber vielleicht kann mir trotzdem einer erklären, warum das so ist. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz