Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0119: TextBox anderer Anwendungen mit der Maus auslesen

 von 

Beschreibung 

Dieses Beispiel zeigt wie das Handle des unter der Maus befindlichen Objektes erfasst werden kann. Mit dem Handle wiederum läßt sich der Klassenname des Objektes erfahren. Handelt es sich um eine Edit-Klasse oder eine TextBox, kann als letzter Schritt über die SendMessage und dem gewonnenen Handle das Textfeld ausgelesen werden.

Schwierigkeitsgrad:

Schwierigkeitsgrad 2

Verwendete API-Aufrufe:

GetClassNameA (GetClassName), GetCursorPos, GetParent, SendMessageA (SendMessage), WindowFromPoint

Download:

Download des Beispielprojektes [2,9 KB]

'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!

'------------- Anfang Projektdatei PROJECT1.VBP -------------
'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Optionsfeld-Steuerelement "Option2"
' Steuerelement: Optionsfeld-Steuerelement "Option1"
' Steuerelement: Timersteuerelement "Timer1"
' Steuerelement: Textfeld "Text2"
' Steuerelement: Textfeld "Text1"
' Steuerelement: Beschriftungsfeld "Label7"
' Steuerelement: Beschriftungsfeld "Label6"
' Steuerelement: Beschriftungsfeld "Label4"
' Steuerelement: Beschriftungsfeld "Label2"
' Steuerelement: Beschriftungsfeld "Label1"
' Steuerelement: Beschriftungsfeld "Label5"
' Steuerelement: Beschriftungsfeld "Label3"

Option Explicit

Private Declare Function SendMessage Lib "user32" Alias _
        "SendMessageA" (ByVal hwnd As Long, ByVal wMsg _
        As Long, ByVal wParam As Long, ByVal lParam As _
        Any) As Long

Private Declare Function WindowFromPoint Lib "user32" (ByVal _
        xPoint As Long, ByVal yPoint As Long) As Long
        
Private Declare Function GetCursorPos Lib "user32" (lpPoint As _
        POINTAPI) As Long
        
Private Declare Function GetClassName Lib "user32" Alias _
        "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName _
        As String, ByVal nMaxCount As Long) As Long

Private Declare Function GetParent Lib "user32" _
        (ByVal hwnd As Long) As Long
      
Private Type POINTAPI
  x As Long
  y As Long
End Type

Const WM_SETTEXT = &HC
Const WM_GETTEXT = &HD

Private Sub Timer1_Timer()
  Dim Result&, Handle&, Parent, P As POINTAPI, Buffer$, Class$
  
    Result = GetCursorPos(P)
    Handle = WindowFromPoint(P.x, P.y)
    Parent = GetParent(Handle)
    Class = Space$(128)
    Result = GetClassName(Handle, Class, 128)
    Class = LCase(Left$(Class, Result))
    
    Label2.Caption = Handle
    Label4.Caption = Parent
    Label6.Caption = Class
    
    If InStr(1, Class, "edit") <> 0 Or _
       InStr(1, Class, "text") <> 0 Then
      If Option1.Value Then
        Buffer = Space$(32767)
        Result = SendMessage(Handle, WM_GETTEXT, Len(Buffer), _
                             ByVal Buffer)
        Text1.Text = Left$(Buffer, Result)
      Else
      
        Call SendMessage(Handle, WM_SETTEXT, 0&, _
                         ByVal CStr(Text1.Text))
      End If
    End If
End Sub
'---------- Ende Formular "Form1" alias Form1.frm  ----------
'-------------- Ende Projektdatei PROJECT1.VBP --------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

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.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 8 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von piper am 28.08.2011 um 09:21

Tip: Browser-Felder lassen sich via Clipboard teil-automatisiert bedienen; ein R-Mouse-Click reicht aus.
Also: Clipboard.Clear, .GetText, .SetText etc. sowie R-Mouse ContextMenü Copy/Past (oder Ctrl-C/Ctrl-V) auf Zielfeld.

PS) Mit der Maus automatisiert Buchstaben (Daten!) rundum zu feuern ist ohnehin eine ziemlich abenteuerliche Idee; Kalschnikow-Software. :)

Kommentar von Timon am 10.01.2006 um 16:20

ALS TIP: So können auch gespeicherte Passwörter in Passwortfelder (wo sonst nur ***** steht) ausgelesen werden! Das geht alerdings nicht im Internet..

TIP2: Die Abfrage ob Class "text" oder "edit" enthaltet kann auch weggelassen werden. So können auch Fenstertitel und vieles anderes ausgelesen werden. Es entsteht dabei kein Fehler!

Der Tipp ist wirklich super einfach, und funktioniert auch noch dazu! Einfach Klasse!

Kommentar von Tornado am 10.10.2004 um 19:35

wenn er geht dann echt SAUGEIL!!! einer der einfachsten und verständlichsten, gleichzeitig aber auch brauchbarsten tipps dies hier gibt ^^respekt!

Kommentar von FlAsH am 07.08.2004 um 13:23

kann ich irgendwie ein bestimmtes textfeld auslesen?

Kommentar von Martin am 10.06.2004 um 12:37

Bei diesem Beispiel wird ja der Text aus bestimmten Klassen(EDIT oder Text) ausgelesen.
Nun ist ein Frame des InternetExplorer bekanntlich keine der o.g. Klassen.

Wie lese ich also bei einem InternetExplorer den Text aus???

Kommentar von Nimrod am 30.04.2003 um 20:52

Servus,
der Tipp funktioniert super, aber gibt es auch einen Weg um die Maus nicht verwenden zu müssen?? Weiß wer was

Kommentar von Mohamed am 11.03.2002 um 12:05

Hallo
leider funktioniert deiser Tip nicht beim Internet Seiten (Passwort eingaben oder Formular...)
gibt´s villeicht ein möglichkeit dass da auch Funktioniert.

Kommentar von Georg W. am 17.12.2001 um 23:25

Hallo...
Dieser Tipp funktioniert bei mir unter Win2000 nicht. Kann mir jemand helfen?