Управление чужим приложением через SendMessage - VB
Формулировка задачи:
Итак, суть проблемы:
Есть приложение для работы с реле по USB. Исходники приложения поставщик отказался предоставить, а управлять реле надо несколько умнее чем тыкая 4 кнопке на форме.
Написал небольшую программку которая делает все расчеты но столкнулся с проблемой.
Не могу получить хандлы кнопок с окна из которого переключаются реле.
используя WinDowzer автор ManHunter я подсмотрел след, названия и тип кнопок одинаковые, это раз.
Второе они лежат в GrupBox который лежит в Panel которая находится в окне, это два.
Функции FindWindow нахожу окно, FindWindowEx - панель в окне, а как далее не пойму, ни кнопки ни GrupBox не находит.
Клас кнопок "TButton", название "Установить в 1".
Решение задачи: «Управление чужим приложением через SendMessage»
textual
Листинг программы
Option Explicit
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExW" (ByVal hWndParent As Long, ByVal hWndChildAfter As Long, ByVal lpClassName As Long, ByVal lpWindowName As Long) As Long
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Private Const GW_CHILD As Long = 5
Private Const GW_HWNDNEXT As Long = 2
Private Sub Form_Load()
Dim TMain As Long
Dim TPanel As Long
Dim TGroup As Long
Dim btn(4) As Long
TMain = FindWindowEx(0, 0, StrPtr("TMain"), StrPtr("USB датчик температуры - Мастер Кит - BM1707"))
If TMain = 0 Then Exit Sub
TPanel = FindWindowEx(TMain, 0, StrPtr("TPanel"), 0)
If TPanel = 0 Then Exit Sub
TGroup = FindWindowEx(TPanel, 0, StrPtr("TGroupBox"), StrPtr(" Управление каналами "))
If TGroup = 0 Then Exit Sub
' // Записать
btn(0) = GetWindow(TGroup, GW_CHILD)
' // Нижняя "Сбросить в 0"
btn(1) = GetWindow(btn(0), GW_HWNDNEXT)
' // Верхняя "Сбросить в 0"
btn(2) = GetWindow(btn(1), GW_HWNDNEXT)
' // Нижняя "Установить в 1"
btn(3) = GetWindow(btn(2), GW_HWNDNEXT)
' // Верхняя "Установить в 1"
btn(4) = GetWindow(btn(3), GW_HWNDNEXT)
Debug.Print Hex(btn(0))
Debug.Print Hex(btn(1))
Debug.Print Hex(btn(2))
Debug.Print Hex(btn(3))
Debug.Print Hex(btn(4))
End Sub