Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 1
Регистрация: 08.04.2015
Сообщений: 5

Управление чужим приложением через SendMessage

10.04.2015, 14:26. Показов 2233. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Итак, суть проблемы:
Есть приложение для работы с реле по USB. Исходники приложения поставщик отказался предоставить, а управлять реле надо несколько умнее чем тыкая 4 кнопке на форме.
Написал небольшую программку которая делает все расчеты но столкнулся с проблемой.
Не могу получить хандлы кнопок с окна из которого переключаются реле.
используя WinDowzer автор ManHunter я подсмотрел след, названия и тип кнопок одинаковые, это раз.
Второе они лежат в GrupBox который лежит в Panel которая находится в окне, это два.
Функции FindWindow нахожу окно, FindWindowEx - панель в окне, а как далее не пойму, ни кнопки ни GrupBox не находит.
Клас кнопок "TButton", название "Установить в 1".
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.04.2015, 14:26
Ответы с готовыми решениями:

Управление host-приложением MS Word
Помогите пожалуйста с задачей, не когда ранее не сталкивалась с VBA: Разработайте скрипт, который позволяет поменять местами четные и...

Управление чужим приложением
Добрый день киберчани! Задался вопросом, можно ли в чужом приложении(игре) нажать игровую кнопку(не послать нажатие , а нажать внутри...

Управление чужим приложением на Qt5
Пытаюсь получить HWnd объектов в вайбере и вообще не как не получается, если смотреть по классам то они все имеют один и тот же класс...

7
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
10.04.2015, 19:23
Скинь EXE, в котором нужно найти кнопки.
0
0 / 0 / 1
Регистрация: 08.04.2015
Сообщений: 5
10.04.2015, 20:07  [ТС]
BM1707.7z
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
10.04.2015, 21:47
Цитата Сообщение от SilenStormS2 Посмотреть сообщение
Не могу получить хандлы кнопок с окна из которого переключаются реле.
А у вас после запуска кнопки разблокированы? У меня всё заблокировано, может потому, что нет устройства.
В общем то хендлы не сложно получить. Я не знаю какой у вас код, но вложенные кнопки надо искать использовав 2 раза FindWindowEx, вначале ищем панель в окне, а потом подставляете в эту функцию хендл панели ( второй параметр) и снова ищите, будут кнопки.
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
10.04.2015, 22:08
Лучший ответ Сообщение было отмечено SilenStormS2 как решение

Решение

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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
4
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
10.04.2015, 22:14
...партизанен. Все тут http://usbsergdev.narod.ru/BM1707/BM1707.html

Лучше бы указали конкретную модель мастер-китовского реле, так как к примеру на MP707 сорцы были открыты под BCB/
0
0 / 0 / 1
Регистрация: 08.04.2015
Сообщений: 5
11.04.2015, 07:56  [ТС]
FindWindowEx(TMain, 0, StrPtr("TPanel"), 0)
понятно, я для поиска панели ставил TMain и ноль, для поиска групбокса ставил первым TMain а вторым TPanel и мне возвращало ноль.

Добавлено через 13 минут
вот отсюда брал программу http://olimp-z.ru/mp707r
Да сейчас на форум зашел там есть исходники на C но я С не занимался с универа, думаю вспоминать и разбирать буду дольше чем тут доделать имитацию нажатий кнопок

Добавлено через 54 минуты
Вот такой в итоге модуль вышел, все работает, большое спасибо за подсказку
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
Option Explicit
 
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Any) As Long
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 Type botom
  btn1_1 As Long
  btn1_0 As Long
  btn2_1 As Long
  btn2_0 As Long
End Type
 
Const BM_CLICK = &HF5
Private Const GW_CHILD      As Long = 5
Private Const GW_HWNDNEXT   As Long = 2
 
 
Private Function GetHndl() As botom
    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 Function
    
    TPanel = FindWindowEx(TMain, 0, StrPtr("TPanel"), 0)
    If TPanel = 0 Then Exit Function
    
    TGroup = FindWindowEx(TPanel, 0, StrPtr("TGroupBox"), StrPtr(" Óïðàâëåíèå êàíàëàìè "))
    If TGroup = 0 Then Exit Function
    
 
    btn(0) = GetWindow(TGroup, GW_CHILD)
 
    btn(1) = GetWindow(btn(0), GW_HWNDNEXT)
 
    btn(2) = GetWindow(btn(1), GW_HWNDNEXT)
 
    btn(3) = GetWindow(btn(2), GW_HWNDNEXT)
 
    btn(4) = GetWindow(btn(3), GW_HWNDNEXT)
 
    GetHndl.btn2_1 = btn(1)  
    GetHndl.btn1_1 = btn(2)  
    GetHndl.btn2_0 = btn(3)  
    GetHndl.btn1_0 = btn(4)  
    
    
End Function
 
 
Public Sub Rele1_On()
SendMessage GetHndl().btn1_0, BM_CLICK, 0, ""
End Sub
 
Public Sub Rele1_Off()
SendMessage GetHndl().btn1_1, BM_CLICK, 0, ""
End Sub
 
Public Sub Rele2_On()
SendMessage GetHndl().btn2_0, BM_CLICK, 0, ""
End Sub
 
Public Sub Rele2_Off()
SendMessage GetHndl().btn2_1, BM_CLICK, 0, ""
End Sub
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
12.04.2015, 14:26
...партизанен в самом соку, значит все таки MP707
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.04.2015, 14:26
Помогаю со студенческими работами здесь

Взаимодействие с чужим приложением
Здравствуйте господа. Нужна ваша помощь по таким вопросам: 1. из своей программы мне нужно читать значения из памяти другого...

Управление приложением через VBA
Здравствуйте! Имеется приложение на C#, VS2010. Существует ли способ добавить в него поддержку VBA, чтобы при помощи макросов управлять...

Управление приложением на андроиде через интернет
Здравствуйте,подскажите пожайлуйста как реализовать такой вот алгоритм: Пользователь нажимает на кнопку в программе под Windows,через...

Управление приложением блокнот через код C#
Всем привет! Подскажите как мне сделать так, чтоб моя программа открыла в стандартном блокноте винды файл, и сохранила его с другой...

Управление приложением через веб-форму
В общем есть у меня одна программа на C# (WinForms), которая висит на сервере и выполняет определенные действия. Появилась необходимость...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru