AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Active Window on change?

Ein Thema von MaToBe · begonnen am 3. Nov 2008 · letzter Beitrag vom 3. Nov 2008
Antwort Antwort
MaToBe

Registriert seit: 2. Aug 2008
162 Beiträge
 
#1

Active Window on change?

  Alt 3. Nov 2008, 12:26
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
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: Active Window on change?

  Alt 3. Nov 2008, 12:49
Hallo

Am einfachsten geht's wohl in einem Timer GetForegroundWindow aufzurufen und dann den Text des aktiven Fensters mit
GetWindowText zu ermitteln.
Thomas
  Mit Zitat antworten Zitat
MaToBe

Registriert seit: 2. Aug 2008
162 Beiträge
 
#3

Re: Active Window on change?

  Alt 3. Nov 2008, 17:21
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 .
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#4

Re: Active Window on change?

  Alt 3. Nov 2008, 17:52
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
MaToBe

Registriert seit: 2. Aug 2008
162 Beiträge
 
#5

Re: Active Window on change?

  Alt 3. Nov 2008, 19:01
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#6

Re: Active Window on change?

  Alt 3. Nov 2008, 19:36
Dann reservier mal ein Byte mehr Speicher, die Hilfe war da nicht ganz eindeutig:SetLength(sTitle,GetWindowTextLength(Wnd) + 1); So besser?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
MaToBe

Registriert seit: 2. Aug 2008
162 Beiträge
 
#7

Re: Active Window on change?

  Alt 3. Nov 2008, 19:47
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.
  Mit Zitat antworten Zitat
MaToBe

Registriert seit: 2. Aug 2008
162 Beiträge
 
#8

Re: Active Window on change?

  Alt 3. Nov 2008, 22:40
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:43 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