Во-первых, SendMessage
возвращает Long
, как вы указали, но s
является типом String
, согласно WM_GETTEXT
:
возвращаемое значение - это количество скопированных символов, не включая завершающий нулевой символ.
Итак, добавьте:
Dim ret As Long
Затем WM_GETTEXTLENGTH
возвращает длину текста в символах, также без завершающего нулевого символа . Но wParam
из WM_GETTEXT
должен включать пробел для завершающего нулевого символа .
Наконец, вам нужно передать ByVal buff
в качестве последнего параметра. Или просто используйте GetWindowText
, который вы объявили:
sub test()
Dim hWndFind As Long, textbox As Long, main_win as long, s as string
main_win = FindWindow(vbNullString, "Exenta Solution")
hWndFind = FindWindowEx(main_win , 0, "WindowsForms10.MDICLIENT.app.0.141b42a_r6_ad1", vbNullString)
textbox = FindWindowEx(hWndFind, 0 , "WindowsForms10.EDIT.app.0.141b42a_r6_ad1", vbNullString)
Dim buff As String
textlen = SendMessage(textbox, WM_GETTEXTLENGTH, 0, 0)
buff = Space(textlen)
Dim ret As String
ret = SendMessage(textbox, WM_GETTEXT, textlen + 1, buff)
ret = GetWindowText(textbox, buff, textlen + 1)
END SUB