vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Sch?tzen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2015
 
zurück
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:     [ Jetzt bewerten ]Views:  9.509 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Vista, Win7, Win8, Win10 Beispielprojekt auf CD 

Summer-Special bei Tools & Components!
Gute Laune Sommer bei Tools & Components
Top Summer-Special - Sparen Sie teilweise über 100,- EUR
Alle sev-Entwicklerkomponenten und Komplettpakete jetzt bis zu 25% reduziert!
zum Beispiel:
  • Developer CD nur 455,- EUR statt 569,- EUR
  • sevDTA 2.0 nur 224,30 EUR statt 299,- EUR
  •  
  • vb@rchiv   Vol.6 nur 18,70 EUR statt 24,95 EUR
  • sevCoolbar 3.0 nur 58,70 EUR statt 69,- EUR
  • - Werbung -Und viele weitere Angebote           Aktionspreise nur für kurze Zeit gültig

    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 9.509 mal aufgerufen.

    Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

    Über diesen Tipp im Forum diskutieren
    Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

    Neue Diskussion eröffnen

    nach obenzurück


    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.
     
       

    Druckansicht Druckansicht Copyright ©2000-2015 vb@rchiv Dieter Otter
    Alle 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.

    Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel