Здравствуйте. такой вопрос. Есть сторонняя программа. Пытаюсь расширить ее функционал. При выборе в комбобоксе выскакивает моя форма. Проблема в том, у большинства контролов отсутствуют имена, поэтому приходится искать перебором хендлов. Более того на форме есть кнопки при которых меняется содержание одних и тех же контролов, поэтому поиск нужного идет по изменившемуся содержанию.
| Код | ' 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
|
Все работает, но жрет дофига памяти и грузит проц. Нет ли какого-нибудь способа избежать перебора (например аналог эвентс из С++)? |