Das Form-Objekt verfügt über vielfältige Ereignisse - unter anderem findet man auch das Deactivate-Ereignis. Dieses Ereignis wird immer dann ausgelöst, wenn die Form selbst nicht mehr die aktive Form ist. Nun sollte man glauben, dass man das Deactivate-Ereignis also auch dazu verwenden kann, um zu prüfen, ob eine andere Anwendung aktiviert wurde: Private Sub Form_Deactivate() MsgBox "Anwendung wurde deaktiviert!" End Sub Starten Sie ein Projekt und fügen obigen Code in den Codeteil der Form1 ein. Starten Sie nun das Programm und aktivieren anschließend irgendeine beliebige andere Anwendung. Laut unserem Quellcode sollte nun eine MsgBox mit dem Text "Anwendung wurde deaktiviert!" erscheinen. Doch weit gefehlt!. Warum? Das Deactivate-Ereignis wird immer nur dann ausgelöst, wenn eine andere Form innerhalb der eigenen Anwendung aktiviert wird - nicht also eine fremde Anwendung. Was nun? Eine Möglichkeit wäre das ganze über einen Timer und der API GetForegroundWindow abzufragen. Löschen Sie den bisherigen Code aus dem Codeteil der Form und fügen stattdessen folgenden Code ein: Option Explicit ' zunächst die benötigte API-Deklaration Private Declare Function GetForegroundWindow Lib "user32" () As Long Private Sub Form_Load() ' Timer initialisieren Timer1.Enabled = False Timer1.Interval = 150 End Sub Private Sub Form_Activate() ' Timer starten Timer1.Enabled = True End Sub Private Sub Timer1_Timer() ' Prüfen, ob Anwendung deaktiviert wurde If GetForegroundWindow() <> Me.hWnd Then MsgBox "Anwendung wurde deaktiviert!" Timer1.Enabled = False End If End Sub Wenn Sie nun das Projekt starten und anschließend eine beliebige andere Anwendung aktivieren, erscheint - wie gewünscht - die MsgBox mit dem Text "Anwendung wurde deaktiviert!". Nun ergibt sich aber wieder ein Problem Die MsgBox erscheint nur ein einziges Mal - auch wenn wir die Anwendung zwischenzeitlich wieder aktivieren und anschließend deaktivieren. Abhilfe schafft hier folgende Änderung am obigen Code: Private Sub Timer1_Timer() ' Prüfen, ob Anwendung deaktiviert wurde If GetForegroundWindow() <> Me.hWnd Then If Timer1.Tag <> "Deactivated" Then MsgBox "Anwendung deaktiviert!" Timer1.Tag = "Deactivated" End If Else If Timer1.Tag <> "" Then MsgBox "Anwendung wurde wieder aktiviert!" Timer1.Tag = "" End If End If End Sub Wir merken uns einfach den aktuellen Status in der Tag-Eigenschaft des Timers. Ist die Anwendung aktiv, also aktiviert, setzen wir Timer1.Tag = "" - andernfalls Timer1.Tag = "Deactivate". Auf diese Weise können wir genau feststellen, wann unsere Anwendung deaktiviert und wieder aktiviert wurde. Dieser Tipp wurde bereits 13.591 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
Neu! sevDTA 3.0 Pro SEPA mit Kontonummernprüfung Erstellen von SEPA-Dateien mit integriertem BIC-Verzeichnis und Konto- nummern-Prüfverfahren, so dass ungültige Bankdaten bereits im Vorfeld ermittelt werden können. Tipp des Monats Mai 2024 Hermann Röttger Wochentage eines Datumsbereichs ermitteln Wochentage eines Datumsbereichs ermitteln, optional mit Feiertagsberechnung TOP Entwickler-Paket TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR... |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |