Rubrik: Oberfläche · Fenster | VB-Versionen: VB6, VBA | 11.12.12 |
GetActiveWindow oder GetForegroundWindow Erklärung des Unterschieds zwischen den API Funktionen GetActiveWindow() und GetForegroundWindow() | ||
Autor: Ralf Schlegel | Bewertung: | Views: 12.349 |
www.vb-zentrum.de | System: Win9x, WinNT, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Was ist eigentlich der Unterschied zwischen GetActiveWindow() und GetForegroundWindow() ?
Public Declare Function GetActiveWindow Lib "user32" () As Long Public Declare Function GetForegroundWindow Lib "user32" () As Long
Auf den ersten Blick: keiner! - und auf den zweiten?
Nehmen wir an Sie verwenden die API Funktion MessageBoxW anstelle der VBA internen Funktion MsgBox, weil die Textausgabe z.B. Unicode unterstützen soll. Die Funktion MessageBoxW benötigt nun aber ein Fensterhandle (hWnd), das uns
nicht immer zur Verfügung steht. Viele Programmierer greifen dann auf GetForegroundWindow zurück, was erst einmal nicht falsch ist, aber vielleicht gar nicht gewollt: denn GetForeGroundWindow legt die MessageBox systemweit in den
Vordergrund, während GetActiveWindow sich nur auf den aktuellen Thread (also Ihre Anwendung) bezieht. Man könnte auch sagen: GetForegroundWindow entspricht dem MsgBox Style vbSystemModal und blockiert damit u.U. auch andere Anwendungen.
Überlegen Sie sich also genau, wie Ihre MessageBox in Erscheinung treten soll!
Hier nun noch das komplette Beispiel:
Private Declare Function MessageBoxW Lib "user32" ( _ ByVal hWnd As Long, _ ByVal lpText As Long, _ ByVal lpCaption As Long, _ ByVal msgType As VbMsgBoxStyle) As VbMsgBoxResult
Public Function MessageBox(ByVal lpText As String, _ ByVal lpCaption As String, _ ByVal mbStyle As VbMsgBoxStyle) As VbMsgBoxResult Dim hWnd As Long If (mbStyle And vbSystemModal) Then hWnd = GetForegroundWindow ' get the active window handle of the system Else hWnd = GetActiveWindow ' get the active window handle of your application End If MessageBox = MessageBoxW(hWnd, StrPtr(lpText), StrPtr(lpCaption), mbStyle) End Function