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.592 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. |
sevISDN 1.0 Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats Mai 2024 Hermann Röttger Wochentage eines Datumsbereichs ermitteln Wochentage eines Datumsbereichs ermitteln, optional mit Feiertagsberechnung sevGraph (VB/VBA) Grafische Auswertungen Präsentieren Sie Ihre Daten mit wenig Aufwand in grafischer Form. sevGraph unterstützt hierbei Balken-, Linien- und Stapel-Diagramme (Stacked Bars), sowie 2D- und 3D-Tortendiagramme und arbeitet vollständig datenbankunabhängig! |
||||||||||||||||
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. |