Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Letztes aktives Fenster in Desktop notieren (GetForegroundWindow) (https://www.delphipraxis.net/159304-letztes-aktives-fenster-desktop-notieren-getforegroundwindow.html)

thomas2009 22. Mär 2011 16:53


Letztes aktives Fenster in Desktop notieren (GetForegroundWindow)
 
Hi
mein Code soll ständig das aktive Fenster auf Desktop notieren

Durch ein Klick auf Button1 soll letzte aktive Fenster den Fokus bekommen

hier ist der Code :
Delphi-Quellcode:
Var
hwnd: THandle;
...

procedure TForm1.Button1Click(Sender: TObject);
begin
hWnd := GetForegroundWindow;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
          lpRect : TRect;
begin
  if not (GetForegroundWindow = self.Handle) and (GetForegroundWindow <> self.Handle)
    then begin
            hWnd := GetForegroundWindow; end;

end;
Der Timer soll aber nur das aktive Fenster notieren
Damit ich später durch ein Klick auf Button1 das letzte aktive Fenster aktivieren kann

Natürlich der Timer soll mein Programm-Fenster ignorieren

Wie soll der Code sein, damit mein Ziel erreiche ?

Güß

himitsu 22. Mär 2011 17:07

AW: Letztes aktives Fenster in Desktop notieren (GetForegroundWindow)
 
Bei Delphi ist alles ein Fenster/Window.
> rate mal, warum es Windows heißt :zwinker:

Auch ein Edit und ein Button sind Windows.

Also darfst du nicht nur auf deine Fenster reagieren, sondern auf Alles, was zu einem Program gehört.

Lösung, wenn es nur dein Hauptfenster betrifft, welches ignoriert werden soll.
gefundenes Window mit deinem Fensterhandle vergleichen und wenn nicht, dann solange den Parent prüfen, bis man an oberster Ebene angekommen ist oder bis du an deinem Fenster ankommst.

Sonstige Lösung: Die Prozess-ID zum Fenster auslesen und mit der deines Programmes vergleichen.


PS: ein globaler Hook, welcher auf Fensterwechsel reagiert, wäre wohl auch ganzt nett, anstatt des Timers.

PPS: Was soll eigentlich der doppelte Vergleichscode?

wicht 22. Mär 2011 17:24

AW: Letztes aktives Fenster in Desktop notieren (GetForegroundWindow)
 
Zitat:

PPS: Was soll eigentlich der doppelte Vergleichscode?
Doppelt hält eben besser. Könnte ja sein, dass beim ersten Vergleich ein Bit erst halb gesetzt ist.

thomas2009 22. Mär 2011 17:52

AW: Letztes aktives Fenster in Desktop notieren (GetForegroundWindow)
 
Zitat:

Zitat von himitsu (Beitrag 1090308)
Lösung, wenn es nur dein Hauptfenster betrifft, welches ignoriert werden soll.

Mein Programm hat mehrere Fenster (Forms) aber das ist kein Problem, da der Timer deaktiviert wird, wenn das Haupt Fenster ausgeblendet wird oder wenn ich ein anderes Fenster einblende

Zitat:

Zitat von himitsu (Beitrag 1090308)
Sonstige Lösung: Die Prozess-ID zum Fenster auslesen und mit der deines Programmes vergleichen.

Keine Ahnung wie es geht mit dieser Lösung

Zitat:

Zitat von himitsu (Beitrag 1090308)
ein globaler Hook, welcher auf Fensterwechsel reagiert

Ich habe nie vorher mit Hook keine Dinge gemach. Also keine Erfahrung und keine Ahnung so zu sagen :(

himitsu 22. Mär 2011 18:19

AW: Letztes aktives Fenster in Desktop notieren (GetForegroundWindow)
 
GetForegroundWindow
> http://msdn.microsoft.com/en-us/library/ms633505.aspx
> dort dann auf "Window Functions"
> und siehe da, es gibt ein GetParent und GetWindowThreadProcessId

DeddyH 22. Mär 2011 19:00

AW: Letztes aktives Fenster in Desktop notieren (GetForegroundWindow)
 
Jetzt kann man sich denken, wie die beiden nächsten Fragen des TE lauten *seufz*


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:12 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