Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 |

 

  Вопрос: ReadProcessMemory() Добавлено: 17.03.07 18:12  

Автор вопроса:  Gogic

Ответить

  Ответы Всего ответов: 34  

Номер ответа: 16
Автор ответа:
 Gogic



Вопросов: 38
Ответов: 121
 Профиль | | #16 Добавлено: 19.03.07 01:30
Ага, там 3 взаимосвязанных Listview, каждый Listview во Frame.

Ответить

Номер ответа: 17
Автор ответа:
 EUGY



Вопросов: 0
Ответов: 454
 Профиль | | #17 Добавлено: 19.03.07 01:48
И это тебе было нужно - из Listview визуальные данные скопировать? Всего-то?

Ответить

Номер ответа: 18
Автор ответа:
 Gogic



Вопросов: 38
Ответов: 121
 Профиль | | #18 Добавлено: 19.03.07 20:40
Подскажете, может, как на уровне окон это сделать?

Ответить

Номер ответа: 19
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #19 Добавлено: 19.03.07 22:02
Ну легче наверное найти хендел этого Listview, и вытаскивать данные посылкой в него нужных сообщений...

Ответить

Номер ответа: 20
Автор ответа:
 Gogic



Вопросов: 38
Ответов: 121
 Профиль | | #20 Добавлено: 19.03.07 23:09
А примерчик можно, как хендлы искать? Перечислением дочерних окон, или еще как?

Ответить

Номер ответа: 21
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #21 Добавлено: 19.03.07 23:49
Именно. Находишь по заголовку хендел окна и перебираешь в нём дочерние. Чтобы найти хендел именно нужного тебе 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

Ответить

Номер ответа: 22
Автор ответа:
 Gogic



Вопросов: 38
Ответов: 121
 Профиль | | #22 Добавлено: 20.03.07 00:04
Если даже я найду хендлы, для ListView что-ли прокатят сообщения типа WM_CUT, WM_COPY?

Ответить

Номер ответа: 23
Автор ответа:
 Gogic



Вопросов: 38
Ответов: 121
 Профиль | | #23 Добавлено: 20.03.07 01:41

Для меня сильно сложно все эти CallBack'и :-)


Private Sub Command2_Click()
Dim EnumElement_ As Long
EnumElement_ = 1
EnumChildWindows hWndParent, AddressOf EnumElement_, 0&
End Sub

Пишет, что что-то пропущено.

Попробовал вот-что:

WindowID = FindWindow(vbNullString, "ArbAlarm";)
WindowID2 = FindWindowEx(WindowID, 0, "BUTTON", vbNullString)
Debug.Print WindowID, WindowID2

Кнопки на форме находит без проблем.
Прочитал, что для ListView имя класса "WC_LISTVIEW". Не находит!!!

"STATIC"- используется для окон, в которых выводится текст.
Делаем так:

Private Sub Command1_Click()
Dim WindowID As Long
Dim WindowID2 As Long
Dim START_ADDRESS As Long

WindowID = FindWindow(vbNullString, "ArbAlarm";)
START_ADDRESS = 0
For i = 1 To 10
WindowID2 = FindWindowEx(WindowID, START_ADDRESS, "STATIC", vbNullString)
Debug.Print WindowID, WindowID2
START_ADDRESS = WindowID2
Next

End Sub


Получил несколько хендлов. Дальше что делать, WM_COPY?

Ответить

Номер ответа: 24
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #24 Добавлено: 20.03.07 06:11
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, весьма вероятно, что достать из него ничего не получится.

Ответить

Номер ответа: 25
Автор ответа:
 Gogic



Вопросов: 38
Ответов: 121
 Профиль | | #25 Добавлено: 21.03.07 02:15
Обнадежил))). WC_LISTVIEW - это заранее заданная константа, "WC_LISTVIEW" - это по ходу -

String, т.к. в файле API32.TXT такие константы не заданы, то я и действовал по ходу.

Функция Public 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 имеет в своем

подчинении переменную lpsz1 as string (которая означает принадлежность к классу), причем она

String!!!
Предлагаешь опять с процессами маяться?
Объясни, почему из статиков ничего не достать? Сам пробовал?

Ответить

Номер ответа: 26
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #26 Добавлено: 21.03.07 09:57
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? Доставай, флаг тебе в руки.

Ответить

Номер ответа: 27
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #27 Добавлено: 21.03.07 18:42
2 GSerg
Только учти, что это сообщение выходит за границу WM_USER, а потому винда не будет осуществлять автоматический маршалинг передаваемых по ссылке параметров между двумя разными процессами.


Я чуть-чуть непонял, объясни плз...
Ну понятно когда WM_USER + шо_нибуть указывает на что-то за пределами нашего АП винда небудет автоматически маршалить... А вот причём здесь
...передаваемых по ссылке параметров...
Какая разница, по ссылке они передаются или нет?

Ответить

Номер ответа: 28
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #28 Добавлено: 21.03.07 20:45
Какая разница, по ссылке они передаются или нет?

Потому что по значению, разумеется, придёт. 4 байта в wParam и 4 в lParam.

Ответить

Номер ответа: 29
Автор ответа:
 Gogic



Вопросов: 38
Ответов: 121
 Профиль | | #29 Добавлено: 21.03.07 21:29
Ты пользуешься этим мусором? Тогда неудивительно...
http://www.activevb.de/rubriken/apiviewer/index-apiviewer.html#anchor2

Спасибо! Клевая штука!!!

Только хендлы ListView я так и не нашел, хотя нашел
Private Const WC_LISTVIEW As String = "SysListView".

Может примерчики какие есть еще?

Ответить

Номер ответа: 30
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #30 Добавлено: 21.03.07 21:38
Берёшь Spy++.
Смотришь реальный класс этого окна.
Который запросто окажется AfxИтд.

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам