VB6: Programm bei Fokusverlust beenden

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…

Mit freundlichen Grüßen

Samuel

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

mfg,
Thomas

Hallo Samuel,

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.

cu, holli

nein, in diesem fall würde es funktionieren, da das programm ja nur aus einer form besteht :wink:

mfg,
Thomas

(ps: einige meiner kleinen proggies machens ja auch so)

Hi,
eine andere Möglichkeit bietet

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!!!

greets from MichL (Vienna)

Ja schon, aber die Aussage „der Befehl um ein Programm zu beenden ist unload me“ ist schlicht falsch.

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

Wenn du den in die LostFocus-Prozedur einfügst, sollte es
funktionieren

Die Methode LostFocus wird von der Form nicht angelaufen. Daher würde dies auch nicht Funktionieren.

Gruß

  • Michael -

Ja schon, aber die Aussage „der Befehl um ein Programm zu
beenden ist unload me“ ist schlicht falsch.

Sorry, ja, hast recht, ich geb mich geschlagen :smile:

Hab mich halt unglücklich ausgedrückt…