Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Active Window on change? (https://www.delphipraxis.net/123497-active-window-change.html)

MaToBe 3. Nov 2008 11:26


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

toms 3. Nov 2008 11:49

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.

MaToBe 3. Nov 2008 16:21

Re: Active Window on change?
 
Delphi-Quellcode:
procedure TMainForm.TActiveWindowTimer(Sender: TObject);
begin
  GetForegroundWindow;
  WindowText := GetWindowText(GetForegroundWindow, nil, nil);

  if WindowText <> WindowText2 then
  begin
     Memo1.SelText:= WindowText;
     WindowText2 := WindowText;
  end;
 
end;
habs mal so versucht, allerdings stimmen die Parameter von GetWindowText nicht ?!?

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 .

DeddyH 3. Nov 2008 16:52

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;

MaToBe 3. Nov 2008 18:01

Re: Active Window on change?
 
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));
      AktivesFenster := sTitle;
    end;

    if AktivesFenster <> AktivesFenster2 then
    begin
      Memo1.SelText := (' <<<' + AktivesFenster + '>>> ');
      AktivesFenster2 := AktivesFenster;
    end;
end;
Danke an DeddyH für den Code.

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

DeddyH 3. Nov 2008 18:36

Re: Active Window on change?
 
Dann reservier mal ein Byte mehr Speicher, die Hilfe war da nicht ganz eindeutig:
Delphi-Quellcode:
SetLength(sTitle,GetWindowTextLength(Wnd) + 1);
So besser?

MaToBe 3. Nov 2008 18:47

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.

MaToBe 3. Nov 2008 21:40

Re: Active Window on change?
 
Zitat:

Zitat von MaToBe
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) + 1);
      AktivesFenster := sTitle;
    end;

    if AktivesFenster <> AktivesFenster2 then
    begin
      Memo1.SelText := (' <<<' + AktivesFenster + '>>> ');
      AktivesFenster2 := AktivesFenster;
    end;
end;
Hier nimmt er nur " <<<Notepad" an

Delphi-Quellcode:
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;
Hier nimmt er " <<<Notepad>>> " an.

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 00:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz