Я нахожу hwnd окна. Это я умею.
Дальше:
1. Найти все его дочерные hwnd.
2. Извлеч какое-нибудь свойство из дочерского окна(обьекта).
Например извлеч адрес из строки обозревателя.
а можно и так... если знаешь какой именно класс окна тебе нужОн...
Примерчик из давних разработок...
Получает дескриптор списка в диспетчере задач Windows...
А название класса нужного окна можно через Spy++ надыбать...
LRESULT CALLBACK SysMsgProc(
int code, //код ловушки
WPARAM wParam, // флаг
LPARAM lParam) // адрес структуры
{
//Если открыто новое окно
if (code == HCBT_CREATEWND)
{
wnd = FindWindow("#32770", "Диспетчер задач Windows" // сам диспетчер задач
//wnd=GetForegroundWindow(); //Берем дискриптор окна
if (curr_wnd!=wnd)
{
curr_wnd=wnd;
//if(::GetWindowText(wnd,str,500)!=0) //Берем имя нового окна
//{
//if (strncmp(name,str,23)==0)
//{
if (wnd!=0)
{
wnd = FindWindowEx(wnd, 0, "#32770", 0);
wnd = FindWindowEx(wnd, 0, "SysListView32", 0);
Private Function EnumElement_(ByVal hwnd As Long, ByVal lParam As Long) As Long 'CALLBACK !
'Перечесляет все элементы в указанном окне
Dim c As Byte, t As Integer
Dim sText As String
Dim sClass As String
sClass = Space$(128)
c = GetClassName(hwnd, sClass, 128)
If c > 0 Then
sClass = Left$(sClass, c)
sText = Space$(128)
t = GetWindowText(hwnd, sText, 128)
ReDim Preserve TextBoxTxt(Counter)
TextBoxTxt(Counter) = "[" & sClass & "] = " & Chr(34) & Left$(sText, t) & Chr(34) & " (" & hwnd & ""
Counter = Counter + 1
End If
EnumElement_ = 1
End Function
Public Sub EnumElement(hWndParent As Long)
'Перечесляет все элементы в указанном окне
EnumChildWindows hWndParent, AddressOf EnumElement_, 0&
End Sub
API сам...
2)
тоже шмот кода...
Dim buffer As String, TextLength As Long
TextLength& = SendMessage(hwnd&, WM_GETTEXTLENGTH, 0&, 0&
buffer$ = String(TextLength&, 0&
Call SendMessageByString(hwnd&, WM_GETTEXT, TextLength& + 1, sText)
' В sText будет полученный текст