Das Handle des Fensters, das sich gerade unter dem Mauszeiger befindet, können Sie mit Hilfe der API-Funktionen GetCursorPos und WindowFromPoint ermitteln. GetCursorPos liefert Ihnen in der Benutzerdefinierten Variablen POINTAPI die Koordinaten der Mauszeiger-Position in Pixels und bezogen auf den ganzen Bildschirm. Der Funktion WindowFromPoint übergeben Sie die beiden Elemente X und Y der Variablen erhalten das Handle des Fensters an dieser Stelle zurück. Unter "Fenster" sind hierbei nicht nur komplette Anwendungsfenster zu verstehen, sondern auch die meisten Steuerelemente, die auf einem Fenster beruhen. Gesperrte Steuerelemente (wenn etwa deren Enabled-Eigenschaft auf False gesetzt ist) erscheinen allerdings "durchsichtig" - Sie erhalten hier das Handle des nächsten darunter liegenden Fensters.
Die beiden API-Aufrufe werden in der folgenden Hilfsfunktion ScreenHitTest zusammengefasst:
Private Type POINTAPI
X As Long
Y As Long
End Type
Private Declare Function GetCursorPos Lib "user32" _
(lpPoint As POINTAPI) As Long
Private Declare Function WindowFromPoint Lib "user32" _
(ByVal xPoint As Long, ByVal yPoint As Long) As Long
Public Function ScreenHitTest() As Long
Dim nPoint As POINTAPI
GetCursorPos nPoint
With nPoint
ScreenHitTest = WindowFromPoint(.X, .Y)
End With
End Function
Innerhalb Ihrer Visual Basic-Anwendung können Sie gegebenenfalls anhand des so erhaltenen Fenster-Handles das zugehöríge Steuerelement ermitteln. Näheres dazu finden Sie im Beitrag "Vom Handle zum Control".
|