VB.NET-Tipp 0032: Ursache für Programmaktivierung herausfinden
von Herfried Wagner
Beschreibung
Dieser Tipp zeigt, wie leicht sich ermitteln lässt aus welchem Grund ein Anwendungsfenster aktiviert worden ist.
Schwierigkeitsgrad: | Framework-Version(en): .NET Framework 1.0, .NET Framework 1.1, .NET Framework 2.0, .NET Framework 3.0, .NET Framework 3.5 | .NET-Version(en): Visual Basic 2002, Visual Basic 2003, Visual Basic 2005, Visual Basic 2008 | Download: |
' Dieser Quellcode stammt von http://www.activevb.de ' und kann frei verwendet werden. Für eventuelle Schäden ' wird nicht gehaftet. ' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. ' Ansonsten viel Spaß und Erfolg mit diesem Source! ' Projektversion: Visual Studio 2002/2003 ' Option Strict: An ' Option Explicit: An ' ' Referenzen: ' - System ' - System.Drawing ' - System.Windows.Forms ' ' ############################################################################## ' ############################### ApiHelper.vb ################################# ' ############################################################################## Option Explicit On Option Strict On Option Compare Binary Imports System ' <remarks> ' Stellt Funktionen bereit, die in Verbindung mit ' Zugriffen auf das 32-Bit-Windows-API benötigt ' werden. ' </remarks> Public Class ApiHelper ' <summary> ' Gibt einen 32-Bit-Integer, der die niederwertigen ' 32 Bits von <paramref name="Value"/> enthält, zurück. ' </summary> ' <param name="Value">Wert, dessen Low-Word berechnet werden soll.</param> ' <returns>Low-Word von <paramref name="Value"/>.</returns> Public Shared Function LOWORD(ByRef Value As Int32) As Int32 Return Value And &HFFFF End Function ' <summary> ' Gibt einen 32-Bit-Integer, der die niederwertigen 32 ' Bits von <paramref name="Value"/> enthält, zurück. ' </summary> ' <param name="Value">Wert, dessen Low-Word berechnet werden soll.</param> ' <returns>Low-Word von <paramref name="Value"/>.</returns> Public Shared Function LOWORD(ByRef Value As IntPtr) As Int32 Return LOWORD(Value.ToInt32()) End Function ' <summary> ' Gibt einen 32-Bit-Integer, der die höherwertigen ' 32 Bits von <paramref name="Value"/> enthält, zurück. ' </summary> ' <param name="Value">Wert, dessen High-Word berechnet werden soll.</param> ' <returns>High-Word von <paramref name="Value"/>.</returns> Public Shared Function HIWORD(ByRef Value As Int32) As Int32 If (Value And &H80000000) = &H80000000 Then Return ((Value And &H7FFF0000) \ &H10000) Or &H8000 Else Return (Value And &HFFFF0000) \ &H10000 End If End Function ' <summary> ' Gibt einen 32-Bit-Integer, der die höherwertigen ' 32 Bits von <paramref name="Value"/> enthält, zurück. ' </summary> ' <param name="Value">Wert, dessen High-Word berechnet werden soll.</param> ' <returns>High-Word von <paramref name="Value"/>.</returns> Public Shared Function HIWORD(ByRef Value As IntPtr) As Int32 Return HIWORD(Value.ToInt32()) End Function End Class ' ############################################################################## ' ################################ MainForm.vb ################################# ' ############################################################################## Option Explicit On Option Strict On Option Compare Binary Imports System ' <remarks> ' Hauptformular der Anwendung. ' </remarks> Public Class MainForm Inherits System.Windows.Forms.Form Private Const WM_ACTIVATEAPP As Int32 = &H1C Private Const WM_ACTIVATE As Int32 = &H6 Private Const WA_ACTIVE As Int32 = 1 Private Const WA_CLICKACTIVE As Int32 = 2 Private Const WA_INACTIVE As Int32 = 0 Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) ' Prüfen, ob sich der Fokus-Status unserer Anwendung verändert hat. Select Case m.Msg Case WM_ACTIVATEAPP If m.WParam.Equals(IntPtr.Zero) Then AddMessage( _ "App deactivated - Thread getting focus: " & _ m.LParam.ToString()) Else AddMessage( _ "App activated - Thread losing focus: " & _ m.LParam.ToString()) End If Case WM_ACTIVATE Dim s As String Select Case ApiHelper.LOWORD(m.WParam) Case WA_ACTIVE s = "Window activated by code - " & _ "Window losing focus: " & m.LParam.ToString() Case WA_CLICKACTIVE s = "Window activated by click - " & _ "Window losing focus: " & m.LParam.ToString() Case WA_INACTIVE s = "Window loses focus - " & _ "Window getting focus: " & m.LParam.ToString() End Select If ApiHelper.HIWORD(m.WParam) <> 0 Then s = s & " and minimized" End If AddMessage(s) End Select MyBase.WndProc(m) End Sub Private Sub AddMessage(ByVal s As String) Me.lstEvents.Items.Add(s) End Sub End Class
Ihre Meinung
Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.