Rubrik: Maus & Tastatur · Maus | VB-Versionen: VB4, VB5, VB6 | 25.02.02 |
Controls unter dem Mauszeiger auslesen Dieses Beispiel zeigt, wie sich der Text einer TextBox oder auch die Beschriftung Buttons auslesen lässt. | ||
Autor: Thomas Bannert | Bewertung: | Views: 34.552 |
ohne Homepage | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Unser heutiger Tipp zeigt, wie sich der Inhalt einer TextBox, die Beschriftung einer Schaltfläche, der ausgewählte Eintrag einer ComboBox und und und... auslässen lässt - egal, in welchem Fenster und egal in welcher Anwendung sich das Control befindet. Man fährt einfach mit dem Mauszeiger auf das gewünschte Control - und schon wird der Fenstertext ermittelt.
Und so funktioniet's:
Anhand der aktuellen Mausposition ermitteln wir das Fenster-Handle des Conrols, über welches sich der Mauszeiger gerade befindet. Über die universelle SendMessage API-Funktion wird dann der Fenstertext des Controls ausgelesen und in einem Label unserer Form angezeigt.
Beispielprojekt
Erstellen Sie ein neues Projekt und plazieren Sie folgende Control auf die Form:
tmrTimer (Timer)
lblHandle (Label)
lblPos (Label)
lblWindowText (Label)
cmdStart (CommandButton)
Fügen Sie jetzt noch den nachfolgende Code in den Codeteil der Form ein:
Option Explicit ' zunächst die benötigten API-Deklarationen 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 Private Declare Function SendMessage Lib "user32" _ Alias "SendMessageA" ( _ ByVal hWnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ lParam As Any) As Long Private Const WM_GETTEXT = &HD
Private Sub Form_Load() ' Timer initialisieren tmrTimer.Interval = 10 tmrTimer.Enabled = False End Sub
Private Sub cmdStart_Click() tmrTimer.Enabled = Not tmrTimer.Enabled cmdStart.Caption = IIf(tmrTimer.Enabled, "Stop", "Start") End Sub
Private Sub tmrTimer_Timer() Dim oPoint As POINTAPI Dim hWnd As Long Dim lLength As Long Dim sWindowText As String * 255 ' Mausposition ermitteln If GetCursorPos(oPoint) <> 0 Then ' Fensterhandle des Controls, auf dem sich ' der Mauszeiger befindet hWnd = WindowFromPoint(oPoint.x, oPoint.y) ' Fenstertext des Controls ermitteln lLength = SendMessage(hWnd, WM_GETTEXT, _ Len(sWindowText) + 1, ByVal sWindowText) ' Handle anzeigen lblHandle.Caption = hWnd ' Mausposition anzeigen lblPos.Caption = "x " & oPoint.x & " y " & oPoint.y ' Fenstertext anzeigen lblWindowText.Caption = Left(sWindowText, lLength) End If End Sub