VB 5/6-Tipp 0119: TextBox anderer Anwendungen mit der Maus auslesen
von ActiveVB
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: | Verwendete API-Aufrufe: GetClassNameA (GetClassName), GetCursorPos, GetParent, SendMessageA (SendMessage), WindowFromPoint | 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! '------------- 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-Version | Win32s | Win95 | Win98 | WinME | WinNT4 | Win2000 | WinXP |
VB4 | |||||||
VB5 | |||||||
VB6 |
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?