AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Letztes aktives Fenster in Desktop notieren (GetForegroundWindow)
Thema durchsuchen
Ansicht
Themen-Optionen

Letztes aktives Fenster in Desktop notieren (GetForegroundWindow)

Ein Thema von thomas2009 · begonnen am 22. Mär 2011 · letzter Beitrag vom 22. Mär 2011
Antwort Antwort
thomas2009
(Gast)

n/a Beiträge
 
#1

Letztes aktives Fenster in Desktop notieren (GetForegroundWindow)

  Alt 22. Mär 2011, 16:53
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üß
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#2

AW: Letztes aktives Fenster in Desktop notieren (GetForegroundWindow)

  Alt 22. Mär 2011, 17:07
Bei Delphi ist alles ein Fenster/Window.
> rate mal, warum es Windows heißt

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?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (22. Mär 2011 um 17:09 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#3

AW: Letztes aktives Fenster in Desktop notieren (GetForegroundWindow)

  Alt 22. Mär 2011, 17:24
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.
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
thomas2009
(Gast)

n/a Beiträge
 
#4

AW: Letztes aktives Fenster in Desktop notieren (GetForegroundWindow)

  Alt 22. Mär 2011, 17:52
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

Sonstige Lösung: Die Prozess-ID zum Fenster auslesen und mit der deines Programmes vergleichen.
Keine Ahnung wie es geht mit dieser Lösung

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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#5

AW: Letztes aktives Fenster in Desktop notieren (GetForegroundWindow)

  Alt 22. Mär 2011, 18:19
GetForegroundWindow
> http://msdn.microsoft.com/en-us/library/ms633505.aspx
> dort dann auf "Window Functions"
> und siehe da, es gibt ein GetParent und GetWindowThreadProcessId
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Letztes aktives Fenster in Desktop notieren (GetForegroundWindow)

  Alt 22. Mär 2011, 19:00
Jetzt kann man sich denken, wie die beiden nächsten Fragen des TE lauten *seufz*
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
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 06:30 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