Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > хочу избавиться от циклов


Автор: rattick 18.7.2012, 15:13
Здравствуйте. такой вопрос. Есть сторонняя программа. Пытаюсь расширить ее  функционал. При выборе в комбобоксе выскакивает моя форма. Проблема  в том, у большинства контролов отсутствуют имена, поэтому приходится искать перебором хендлов. Более того на форме есть кнопки при которых меняется содержание одних и тех же контролов, поэтому поиск нужного идет по изменившемуся содержанию.


Код

' Module
Option Explicit
Public cmbHandle as Long
' перебираем контролы на родительской форме
Public Function EnumChildProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
    Dim h2 As Long
     sClass = Space$(mconMAXLEN)
      h2 = iGetClassName(hwnd, sClass, mconMAXLEN)
    sClass = Left$(sClass, h2)
    If sClass = "ThunderRT6ComboBox" Then start(hwnd)
    EnumChildProc = 1
 
Function start(cmbH As Long)' смотрим содержит ли этот комбобокс нужную нам строку
    Dim strFind As String
    strFind = "<Tag>"
    res = SendMessage(cmbH, CB_FINDSTRING, 0, ByVal strFind)
    If res >= 0 Then cmbHandle = cmbH
End Function

'Form1

'ищем нужный хендл
Dim handl as Long ' хендл родительского окна
 Dim index As Long, textin As Long
 Dim st As String
Do While cmbHandle = 0
        Sleep (100)
        EnumChildWindows handl, AddressOf EnumChildProc, ByVal 0&
    Loop

akk:
        index = SendMessage(cmbHandle, CB_GETCURSEL, 0, 0)
          Select Case index

           Case 0     ' Поле Tag находится на первой позиции
                  'Form1.Visible = True
            Case Else
                GoTo akk
        End Select


Все работает, но жрет дофига памяти и грузит проц. Нет ли  какого-нибудь способа избежать перебора (например аналог эвентс из С++)?

Автор: Megas 30.7.2012, 16:35
Можно повесить хуки на нужные сообщения чужего процесса, но для это нужно сначала внедрить специальную библеотеку в память процесса, которая будет переадрессовывать сообщения на ваш процесс.
Вот ссылочка от куда можно начать копание по теме: http://www.xakep.ru/post/55795/

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)