О я тупой идиот. Только на следующий день понял как я заблуждался.
Раз контрол (типа: Edit, Button, ComboBox и т.д.) тоже являются окнами (тока дочерними), то они должны иметь станд. свойства окон: размер, положение, класс и конечно текст, с этим окном ассоциированный.... блин, целый день понадобился, чтобы это понять.
Для получения текст окна можно использовать конечно a/ GetWindowText и GetWindowTextLength, но они будут работать только для главных окон программ и контролов ВАШЕЙ программы, а вот к чужим контролам надо обращаться через посылку соответствующих сообщений, а именно: SendMessage(hnd_contrl, WM_GETTEXTLENGTH, 0, 0).
Таким образом прога получается следующая:
- Код: Выделить всё
'Функция для поиска окна первого уровня
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
'Функция для поиска дочернего окна (коим являются такие контролы: Edit, Button и т.д.)
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 GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hWnd As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal Msg As Long, wParam As Any, lParam As Any) As Long
Private Const WM_GETTEXTLENGTH = &HE
Private Const WM_GETTEXT = &HD
Dim hndExpl As Long, hnd_contr1 As Long, hnd_contr2 As Long, hnd_contr3 As Long
Dim s As String, iTxtLen As Long
'Ищем hWnd Проводника по его классу
hndExpl = FindWindow("ExploreWClass", vbNullString)
'Ищем hWnd ComboBox, который содержит адрес
hnd_contr1 = FindWindowEx(hndExpl, 0, "WorkerA", vbNullString)
hnd_contr2 = FindWindowEx(hnd_contr1 , 0, "ReBarWindow32", vbNullString)
hnd_contr3 = FindWindowEx(hnd_contr2 , 0, "ComboBoxEx32", vbNullString)
iTxtLen = SendMessage(hnd_contr3 , WM_GETTEXTLENGTH, 0, 0)
iTxtLen = iTxtLen + 1
s = Space$(iTxtLen)
iTxtLen = SendMessage(hnd_contr3 , WM_GETTEXT, iTxtLen, ByVal s)
MsgBox s
Главное двигаться не быстрее, чем думает твоя голова.