Ich habe ein Programm, welches aus einer einzigen Form besteht. Wie
kann ich es erreichen, dass das Programm beendet wird, sobald der
Benutzer zu einem anderen Programm wechselt und mein Programm den Fokus
verliert (also wenn es von einem anderen Fenster verdeckt wird)?
Es funktioniert leider nicht, ein End-Befehl in die Deactivate- oder in
die LostFocus-Prozedur der Form einzufügen…
Ich habe ein Programm, welches aus einer einzigen Form
besteht. Wie kann ich es erreichen, dass das Programm beendet
wird, sobald der Benutzer zu einem anderen Programm wechselt
und mein Programm den Fokus verliert (also wenn es von einem
anderen Fenster verdeckt wird)?
Es funktioniert leider nicht, ein End-Befehl in die
Deactivate- oder in die LostFocus-Prozedur der Form
einzufügen…
Hallo Samuel,
der Befehl um ein Programm zu beenden ist
unload me
Wenn du den in die LostFocus-Prozedur einfügst, sollte es funktionieren
der Befehl um ein Programm zu beenden ist
unload me
Wenn du den in die LostFocus-Prozedur einfügst, sollte es
funktionieren
Oho, ganz falsch. Unload Me, oder besser Unload FormObject (man kann auch andere Formen als die aktuelle (=Me) entladen) entlädt die aktuelle Form, wenn eine weitere Form der selben Instanz desselben Programms offen ist läuft das Programm weiter.
Das Problem hier ist, das LostFocus nur ausgelöst wird, wenn innerhalb des Programms ein Focus „verloren“ geht.
Sein Problem ist nur mit API-Funktionen zu lösen. Wobei ich aber leider nicht weiß welche.
Private Declare Function GetForegroundWindow Lib "user32" () As Long
Dann kannst Du folgende abfrage verwenden:
If Me.hWnd GetForegroundWindow Then Call Unload(Me)
Kleiner unschöner Nachteil: Kein Event - Du mußt es in einem Timer immer wieder abfragen z.B. im Halbsekunden-Takt. Habs auf meinem 233 getestet … CPU steigt nicht einmal um 1% … daher auch brauchbar!!!