Управление чужим приложением через 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.1 из 5
Похожие ответы