Entwickler-Ecke

Windows API - Handle des Vorgängers ermitteln


Boldar - So 09.11.08 20:52
Titel: Handle des Vorgängers ermitteln
Hallo,
ist es möglich, das Handle desjenigen Controls zu ermitteln, welches den Fokus hatte, bevor mein Programm den Fokus bekam, und dem Wieder den Fokus zu geben?
Also wenn man z.B. von der Suchleiste im Browser zu dem Programm wechselt, das Handle der Suchleiste.
Müsste man dazu den Fokus permanent überwachen?
Welche Möglichkeiten gibt es dazu ausser pollen(gibt es da villeicht eine message)?
Oder geht das sonst irgendwie?
Grüsse
Boldar


Boldar - Mo 10.11.08 15:59

Nun, im Primzip reicht es auch, wenn ich dem Vorgänger-Programm den Fokus zurückgeben kann.
Es gibt ja

Delphi-Quelltext
1:
self.senttoback                    

aber das gibt ja nicht den Fokus an ein anderes Programm, sondern macht das Fenster nur in den Hintergrund.
Wie kann man überhaupt ermitteln und festlegen, welches Programm den Fokus hat?


Boldar - Mi 12.11.08 21:00

user profile iconBoldar hat folgendes geschrieben Zum zitierten Posting springen:

Wie kann man überhaupt ermitteln und festlegen, welches Programm den Fokus hat?


:PUSH:


jaenicke - Do 13.11.08 05:33

GetForegroundWindow sollte das sein was du suchst.
http://msdn.microsoft.com/en-us/library/ms633505(VS.85).aspx

Zu deiner ursprünglichen Frage:
http://msdn.microsoft.com/en-us/library/ms646282.aspx
WM_KILLFOCUS wird an das Control gesendet, das den Fokus verloren hat.

// EDIT:
Hier findest du mehr dazu:
http://blogs.msdn.com/jfoscoding/archive/2006/08/02/686141.aspx


Boldar - Do 13.11.08 15:42

Muss ich dann wm_killfocus im private für die Form deklarieren?
Denn so geht es nich, wm_killfocus wird so nie ausgelöst...


jaenicke - Do 13.11.08 16:18

Naja, so bekommst du es ja nur bei dem mit, was an dein Formular gesendet wird. Du müsstest glaube ich einen Hook benutzen, denn anders kommst du glaube ich nicht an fremde Windows Botschaften heran. In der WndProc deines Programms kommen ja nur welche an, die an deine Anwendung geschickt wurden.


Boldar - Do 13.11.08 16:20

Kill_focus wird doch ausgeführt wenn die Form den Focus verliert, oder?
Aber wenn ich in die wm_killfocus reinschreibe

Delphi-Quelltext
1:
self.color := clred;                    


wird die Form trotzdem nie rot...


jaenicke - Do 13.11.08 16:23

Die Botschaft wird an das Control gesendet, das den Fokus hatte, ein Formular ist kein Control. Überschreibe einfach deine WndProc, dann wirst du die entsprechenden Botschaften an dein Programm anfangen können.
Für deine eigenen Komponenten gibts auch OnLeave und OnEnter für Fokus erhalten und verloren.