SendMessage & WM_GETTEXT

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von SystemUnknow.

    SendMessage & WM_GETTEXT

    Morgen,
    ich versuche aus einem Programm (ja ist ein Bot, aber um den geht es ja nicht wirklich) Inhalte aus TextBoxen auszulesen, was auch teilweise klappt. Das Problem ist, dass ich immer nur eine TextBox auslesen kann, obwohl sich mehrere im selben Parent-Control befinden..mein Versuch:

    VB.NET-Quellcode

    1. 'GetText-Function im Internet gefunden..
    2. Const WM_GETTEXT As Int32 = &HD
    3. Const WM_GETTEXTLENGTH As Int32 = &HE
    4. Public Function GetText(ByVal hwnd As IntPtr) As String
    5. If (Not hwnd.Equals(IntPtr.Zero)) Then
    6. Dim NumberOfCharacters As Int32 = SendMessageByInt(hwnd, WM_GETTEXTLENGTH, 0, 0)
    7. If NumberOfCharacters > 0 Then
    8. Dim ptText As New StringBuilder(NumberOfCharacters)
    9. Dim Result As Int32 = SendMessageByString(hwnd, WM_GETTEXT, NumberOfCharacters + 1, ptText)
    10. If Result <> 0 Then
    11. Return ptText.ToString()
    12. Else
    13. Return String.Empty
    14. End If
    15. End If
    16. End If
    17. End Function
    18. '-----------------------------------
    19. 'Control finden
    20. Dim main As IntPtr
    21. Dim child As IntPtr
    22. main = FindWindow("ThunderRT6FormDC", "[iB0t] Auto Party") 'Hauptform
    23. child = FindWindowEx(main, IntPtr.Zero, "SSTabCtlWndClass", Nothing) 'TabControl
    24. child = FindWindowEx(child, IntPtr.Zero, "ThunderRT6Frame", "Level Restriction") 'GroupBox
    25. child = FindWindowEx(child, IntPtr.Zero, "ThunderRT6TextBox", Nothing) 'TextBox
    26. 'Ausgeben
    27. Label1.Text = GetText(child)


    Als Ergebnis bekomme ich nun "110", also den Inhalt der 1. TextBox, aber wie bekomme ich den aus der 2. TextBox? Hab schon verschiedenes versucht, aber nichts hat geklappt..
    Hier nochmal der Aufbau von Spy++:


    Hoffe mir kann da jemand weiterhelfen!

    Edit: Achja, noch etwas, was vllt hilft: Wenn ich auf Eigenschaften -> Fenster gehe, steht bei der 1. TextBox (mit dem Inhalt 110) bei Vorheriges Fenster "kein Handle", bei der 2. TextBox steht jedoch das Handle der 1. TextBox und bei Beschriftung "110", aber ich weiß nicht wie ich das im Code umsetzen soll...
    Variable wird überschrieben:

    VB.NET-Quellcode

    1. child = FindWindowEx(main, IntPtr.Zero, "SSTabCtlWndClass", Nothing) 'TabControl
    2. child = FindWindowEx(child, IntPtr.Zero, "ThunderRT6Frame", "Level Restriction") 'GroupBox
    3. child = FindWindowEx(child, IntPtr.Zero, "ThunderRT6TextBox", Nothing) 'TextBox

    nach kompilierung Varibale "child" liefert dir Handle von "ThunderRT6TextBox".
    Verwende für jede Handle separate Variable.

    Hinweis: Verwende keine VB Schlüsselrwörter wie z.b main, das kann zu unerwartete Ergebnisse führen !

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „SystemUnknow“ ()

    Für jedes Control eine eigene Variable, hab ich das richtig verstanden?
    Also so?

    VB.NET-Quellcode

    1. Dim main As IntPtr
    2. Dim tabcontrol As IntPtr
    3. Dim groupbox As IntPtr
    4. Dim textbox1 As IntPtr
    5. Dim textbox2 As IntPtr
    6. main = FindWindow("ThunderRT6FormDC", "[iB0t] Auto Party")
    7. tabcontrol = FindWindowEx(main, IntPtr.Zero, "SSTabCtlWndClass", Nothing)
    8. groupbox = FindWindowEx(tabcontrol, IntPtr.Zero, "ThunderRT6Frame", "Level Restriction")
    9. textbox1 = FindWindowEx(groupbox, IntPtr.Zero, "ThunderRT6TextBox", Nothing)
    10. textbox2 = FindWindowEx(groupbox, IntPtr.Zero, "ThunderRT6TextBox", Nothing)

    textbox1 und textbox2 haben beide den Wert 110..
    Ich habs nun..

    VB.NET-Quellcode

    1. ...
    2. textbox1 = FindWindowEx(groupbox, IntPtr.Zero, "ThunderRT6TextBox", Nothing)
    3. textbox2 = FindWindowEx(groupbox, textbox1, "ThunderRT6TextBox", Nothing)
    4. ...

    Musste das IntPtr.Zero durch das Handle der 1. TextBox ersetzen, wahrscheinlich war das auch in Spy++ gemeint (bei Eigenschaften -> Fenster -> Vorheriges Fenster -> Handle: 1. TextBox - Beschriftung: "110")

    Vielen Dank für deine Bemühungen!