Toon posts:

[VB6] Textbox uitlezen als je alleen de hwnd hebt

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een app X met een textbox Y erin waarvan ik de tekst wil hebben. Met FindWindow en hulp van Spy++ voor de classnames ben ik al achter de wnd gekomen van textbox Y. Maar met welke API call kan ik nou de tekst krijgen ervan :?
even voor de duidelijkheid; de textbox behoort niet tot mijn applicatie, vandaar het gekut met wnd's

[ Voor 19% gewijzigd door Verwijderd op 24-11-2003 14:42 ]


  • Quitter3
  • Registratie: Januari 2001
  • Laatst online: 13-02 16:30
SendMessage(hWnd, WM_GETTEXT, 128, lpText)

Ik weet niet of dit ook in VB geldt, maar denk het wel.

  • _the_crow_
  • Registratie: September 2000
  • Laatst online: 30-03-2025

_the_crow_

Rare vogel

GetWindowText? :?

Visual Basic .NET:
1
2
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA"
         (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long


-Edit-

Even twee regels van gemaakt. Anders is het zo layout-vernaggelend. :)

[ Voor 45% gewijzigd door _the_crow_ op 24-11-2003 14:48 ]

Schrödingers cat: In this case there are three determinate states the cat could be in: these being Alive, Dead, and Bloody Furious.


  • Cyberwizzard
  • Registratie: Juni 2001
  • Laatst online: 27-03-2024
Layout is nog stees kloten :p

Let er ook op dat je waarschijnlijk je string zult moeten initialiseren op een bepaalde lengte omdat de API van plan is de waarde er in te kopieren ipv over te zetten...

  • _the_crow_
  • Registratie: September 2000
  • Laatst online: 30-03-2025

_the_crow_

Rare vogel

Cyberwizzard schreef op 24 november 2003 @ 14:57:
Layout is nog stees kloten :p

Let er ook op dat je waarschijnlijk je string zult moeten initialiseren op een bepaalde lengte omdat de API van plan is de waarde er in te kopieren ipv over te zetten...
Jup...dat klopt. En wel op de volgende manier:
Visual Basic .NET:
1
2
szWT = Space$(255)
returnvalue = GetWindowText(currHWND, szWT, 255)


Voor de lengte heb ik nu staan 255, maar die kan je waarschijnlijk zelf vaststellen met:
Visual Basic .NET:
1
2
Declare Function GetWindowTextLength Lib "user32"
    Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long


:)

-Edit-

Nee echt. Het gaat weer lekker met de layout. :X

[ Voor 12% gewijzigd door _the_crow_ op 24-11-2003 15:03 ]

Schrödingers cat: In this case there are three determinate states the cat could be in: these being Alive, Dead, and Bloody Furious.


Verwijderd

Topicstarter
klopt ja, ff proberen

Verwijderd

Topicstarter
even voor diegenen die later dit opzoeken in de search:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) 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

Dim hw As Long, hwt As Long

Sub Form_Activate()
    Dim s As String * 128
    hw = FindWindow(vbNullString, "Windownaam")
    hwt = FindWindowEx(hw, ByVal 0&, "ThunderRT6TextBox", vbNullString)
    SendMessage hwt, WM_GETTEXT, 128, ByVal s
    Print s
End Sub


zo werkt ie

[ Voor 8% gewijzigd door Verwijderd op 24-11-2003 15:16 ]

Pagina: 1