vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Verschiedenes / Sonstiges   |   VB-Versionen: VB4, VB5, VB613.08.02
Prüfen, ob die eigene Anwendung deaktiviert wurde

Dieses Beispiel zeigt, wie sich feststellen lässt, wann die eigene Anwendung deaktiviert wurde.

Autor:   Dieter OtterBewertung:  Views:  13.551 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

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.
 



Anzeige

Kauftipp Unser Dauerbrenner!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.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


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.