Именно. Находишь по заголовку хендел окна и перебираешь в нём дочерние. Чтобы найти хендел именно нужного тебе LW придётся подумать... Например можно по хенделу получить координаты/размеры окна - думай...
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 найти придётся самому. Может помочь ApiViewer2004
Gogic, не берись за задачу, к которой настолько не готов.
Если ты даже не понимаешь разницы между WC_LISTVIEW и "WC_LISTVIEW" (хоть разницу между 2 и "2" понимаешь?), то у тебя ничего не получится.
Начни с азов, пойми разницу между строками и числами.
"STATIC"- используется для окон, в которых выводится текст.
Как же это относится к listview...
Получил несколько хендлов.
Получил несколько хэндлов статиков. Можешь их выбросить, они тебе не нужны.
Текст из listview получается через LVM_GETITEMTEXT. Только учти, что это сообщение выходит за границу WM_USER, а потому винда не будет осуществлять автоматический маршалинг передаваемых по ссылке параметров между двумя разными процессами. Поэтому тебе понадобится как минимум собственный маршалер (который для среды Win9x нужно реализовать через глобальный memory file-mapping, а для среды NT - через VirtualAllocEx - а для этого потребуется ещё и иметь к целевому процессу права дотупа PROCESS_VM_READ, PROCESS_VM_WRITE и PROCESS_VM_OPERATION).
Пример маршалера - http://bbs.vbstreets.ru/viewtopic.php?t=13572
Да, и последнее. Если у ListView стоит стиль LVS_OWNERDRAWFIXED и/или LVS_OWNERDATA, весьма вероятно, что достать из него ничего не получится.
WC_LISTVIEW - это заранее заданная константа, "WC_LISTVIEW" - это по ходу -
String
Нет слов, что называется...
т.к. в файле API32.TXT такие константы не заданы, то я и действовал по ходу.
Ты пользуешься этим мусором? Тогда неудивительно...
http://www.activevb.de/rubriken/apiviewer/index-apiviewer.html#anchor2
имеет в своем
подчинении переменную lpsz1 as string (которая означает принадлежность к классу), причем она
String!!!
Как этот текст связан с предыдущим?
Предлагаешь опять с процессами маяться?
Во-первых, что значит опять, во-вторых, а у тебя есть выбор?
Объясни, почему из статиков ничего не достать? Сам пробовал?
Снова нет слов...
Из статиков всё достать. Но нахрена тебе статики, если ты работаешь с listview? Ты понимаешь, что static - это как label в VB? Доставай, флаг тебе в руки.
Только учти, что это сообщение выходит за границу WM_USER, а потому винда не будет осуществлять автоматический маршалинг передаваемых по ссылке параметров между двумя разными процессами.
Я чуть-чуть непонял, объясни плз...
Ну понятно когда WM_USER + шо_нибуть указывает на что-то за пределами нашего АП винда небудет автоматически маршалить... А вот причём здесь