Ereignis auslösen

Hallo,

ich möchte in einem Programm ein Ereignis auslösen, wenn ein anderes Fenster aktiviert wird. Im Moment mache ich das so:

Private Declare Function GetForegroundWindow Lib "user32" () As Long
Dim mk, ret As Double

Private Sub Form\_Load()
 Shell "c:\winnt\notepad.exe", vbNormalFocus
 mk = GetForegroundWindow()
End Sub

Private Sub Timer1\_Timer()
 ret = GetForegroundWindow()
 If ret mk Then End
End Sub

Das Programm startet das Notepad. Ist das Notepad nicht mehr das aktive Fenster, wird das Programm beendet.
Das funktioniert, der Timer stört mich aber. Das geht doch auch ohne Timer? Kann mir jemand verraten, wie ich das machen muß?

Gruß, Rainer

Hallo
Das Notepad-Window bekommt eine Nachricht betreffs Window_Deactivate oder so.
Diese Nachricht kann man vielleicht abfangen, indem das Notepadwindow instanziert wird oder so ähnlich.
Möglicherweise bekommt man diese Nachricht auch anders, das Notepad-Hwnd kann man ja bekommen.
Es gibt auch verschiede „spy“-Tools, mit denen sich solche Nachrichten abfangen lassen. Die notwendigen API-Funktionen weiß ich nicht ad hok.
Eine solche Anwendung bekommt alle Nachrichten eines Fensters und somit auch alle Ereignisse. Diese Nachrichten musst Du dann deuten oder filtern und wieder zurücksenden, allemal eleganter als mit Timer Methoden.
Es gibt bei VB eine Beispielanwendung für Bildschirmschoner, da ist viel drin zu diesem Thema.

MfG
Matthias

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Mathias,

Das Notepad-Window bekommt eine Nachricht betreffs
Window_Deactivate oder so.

Um’s Notepad geht es ja auch nicht, das war nur ein Beispiel.

Diese Nachricht kann man vielleicht abfangen, indem das
Notepadwindow instanziert wird oder so ähnlich.
Möglicherweise bekommt man diese Nachricht auch anders, das
Notepad-Hwnd kann man ja bekommen.

Ja.

Es gibt auch verschiede „spy“-Tools, mit denen sich solche
Nachrichten abfangen lassen. Die notwendigen API-Funktionen
weiß ich nicht ad hok.

Auch nicht so wichtig. Es könnte ja auch sein, ich will mal darauf reagieren, daß ein File geschrieben wurde, dann brauche ich ohnehin eine andere API.

Eine solche Anwendung bekommt alle Nachrichten eines Fensters
und somit auch alle Ereignisse. Diese Nachrichten musst Du
dann deuten oder filtern und wieder zurücksenden, allemal
eleganter als mit Timer Methoden.

Ja, aber wie kann ich ohne Warteschleife und immer wieder lesen erfahren, ob das Ereignis eingetreten ist? Ob das ein Timer macht oder eine andere Schleife ist ja im Prinzip egal.

Es gibt bei VB eine Beispielanwendung für Bildschirmschoner,
da ist viel drin zu diesem Thema.

das klingt interessant, das werde ich mir suchen. Hoffenlich ist das nicht mit Mousemove, Mousedown, Keypres … o.ä. gelöst, sonst bin ich nicht weiter als jetzt. Hinter dem Mousemove-Ereignis wird ja wohl keine Warteschleife stecken. Nur wie das funktioniert habe ich noch nicht verstanden.
Das MouseMove-Ereignis selbst programmieren wäre, was ich suche.
Es geht um kein konkretes Projekt, nur um das Verständnis. Die Anwendung kommt dann irgendwann von selbst und dann habe ich keine Zeit zum Suchen. :wink: Mir ist nur klar, daß das mit Klassenmodulen zu tun hat. Über die weiß ich aber noch nichts. Die Beispiele habe ich noch nicht verstanden.

Gruß, Rainer