Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.70/40: Рейтинг темы: голосов - 40, средняя оценка - 4.70
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 634

Как из программы управлять другой, уже запущенной программой

07.01.2015, 18:41. Показов 8707. Ответов 67
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день всем!
Просьба не пинать если эта тема уже была..

Пишу Loader на VB 6.

функции:
1. Проверка путей, файлов +
1. Копирование набора файлов "туда" +
2. запуск приложения "A" +
3. В определенный момент, когда приложение "A" выдаст запрос. В нужное поле ввести информацию и нажать на кнопку "OK" -
4. Дождаться завершения приложения "A" +
5. Копирование набора файлов обратно +


Знаком "+" отметил, на что хватило мозгов реализовать. "-", то с чем прошу помочь...

окошко, коотрое выбрасывает приложение:

Заранее спасибо всем за помощь..
Миниатюры
Как из программы управлять другой, уже запущенной программой  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.01.2015, 18:41
Ответы с готовыми решениями:

Ошибка в MSComm: 'Oшибка : данный COM-порт уже используется другой программой.'
Жизнь заставила возиться с MSComm32.ocx моя прога должна выслать в порт сигнала вызова(запроса), получить от вызываемого устройства ...

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

Управлять GUI-программой из своей программы
Мне надо написать программу, которая бы управляла другой GUI программой. При этом надо программно нажимать кнопки, выбирать разные пункты...

67
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
10.01.2015, 17:38
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от The trick Посмотреть сообщение
1. Если пароль имеет кириллицу, а текущая раскладка приложения - En.
решается так же программно - принудительно переключить перед отсылкой пароля.
Цитата Сообщение от The trick Посмотреть сообщение
Если стоят программы типа PuntoSwitcher и им подобные, перехватывающие клаву.
Они не действуют в окне ввода пароля
Цитата Сообщение от The trick Посмотреть сообщение
Если вдруг на фон вылезет какое-либо окно с оповещением, типа UAC, или разрыв интернета и им подобным, или вылезло окно с ошибкой.
4. Если пользователь жмет какие либо кнопки в данный момент.
5. еСЛИ ВКЛЮЧЕН cAPSlOCK или нажат Shift или нажата Win.
6. Если активно другое полноэкранное приложение во время работы этого лоадера.
Всё остальное исключено характером работы с этой программой, это окошко не выскакивает неожиданно, оно ожидаемо и вызывается по команде юзера, а потому можно обеспечить все благоприятные условия.
Цитата Сообщение от The trick Посмотреть сообщение
по ключевым словам которые я дал
Хм. Ну, а если там вообще нет окон, а всё рисованное к примеру, то какие ключевые слова?
0
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
10.01.2015, 17:52
Цитата Сообщение от Pro_grammer Посмотреть сообщение
решается так же программно - принудительно переключить перед отсылкой пароля.
Добавь в код еще переключение раскладки на нужную в чужом приложении (сколько это займет строк?)
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Они не действуют в окне ввода пароля
Действуют.
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Всё остальное исключено характером работы с этой программой, это окошко не выскакивает неожиданно, оно ожидаемо и вызывается по команде юзера, а потому можно обеспечить все благоприятные условия.
А что у юзера 1 работающий процесс в системе? CapsLock тоже пользователь должен контролировать? Например KAV раньше после нескольких манипуляций с устройствами ввода выводил свое окно если отсутствует лицензия совершенно неконтроллируемо. Таких программ много.
Добавь функционал исключения этих ситуаций в свой код к переключению раскладки, а теперь сравни код с несколькими FindWindowEx'ами и парой тройкой SendMessage'ов.
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Хм. Ну, а если там вообще нет окон, а всё рисованное к примеру, то какие ключевые слова?
В этом приложении есть окна. А вообще многие аспекты я описал в 9 посте.
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
10.01.2015, 20:09
Цитата Сообщение от The trick Посмотреть сообщение
а теперь сравни код с несколькими FindWindowEx'ами и парой тройкой SendMessage'ов.
Может ты невнимательно прочитал, но я написал, что попробовал оба варианта. И естественно сравнил, и выбрал тот, который опубликовал.
0
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
10.01.2015, 20:40
Цитата Сообщение от Pro_grammer Посмотреть сообщение
И естественно сравнил, и выбрал тот, который опубликовал.
Где в твоем опубликованном коде:
Цитата Сообщение от The trick Посмотреть сообщение
Добавь функционал исключения этих ситуаций в свой код к переключению раскладки
0
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 634
10.01.2015, 22:12  [ТС]
Pro_grammer, The trick
Спасибо код работает!
0
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
11.01.2015, 02:06
Лучший ответ Сообщение было отмечено kreotodr как решение

Решение

kreotodr, посмотри - это метод более правильный:
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
Option Explicit
 
Private Declare Function SetWinEventHook Lib "user32" (ByVal eventMin As Long, _
                                                 ByVal eventMax As Long, _
                                                 ByVal hmodWinEventProc As Long, _
                                                 ByVal pfnWinEventProc As Long, _
                                                 ByVal idProcess As Long, _
                                                 ByVal idThread As Long, _
                                                 ByVal dwFlags As Long) As Long
Private Declare Function UnhookWinEvent Lib "user32" (ByVal hWinEventHook As Long) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameW" (ByVal hwnd As Long, _
                                                                          ByVal lpClassName As Long, _
                                                                          ByVal nMaxCount As Long) 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 SendMessage Lib "user32" Alias "SendMessageW" (ByVal hwnd As Long, _
                                                                        ByVal wMsg As Long, _
                                                                        ByVal wParam As Long, _
                                                                        lParam As Any) As Long
 
Private Const WM_SETTEXT        As Long = &HC
Private Const EVENT_OBJECT_SHOW As Long = &H8002&
Private Const WM_LBUTTONDOWN    As Long = &H201
Private Const WM_LBUTTONUP      As Long = &H202
 
Dim hEvent As Long
 
' // Начать захват
Public Sub Hook()
    ' Устанавливаем хук на создание окон в системе
    hEvent = SetWinEventHook(EVENT_OBJECT_SHOW, EVENT_OBJECT_SHOW, 0, AddressOf WinEventProc, 0, 0, 0)
End Sub
 
' // Закончить захват
Public Sub Unhook()
    ' Снимаем хук
    UnhookWinEvent hEvent
End Sub
 
' // Функция вызывается при создании (показе) окна
Private Sub WinEventProc(ByVal hWinEventHook As Long, _
                         ByVal dwEvent As Long, _
                         ByVal hwnd As Long, _
                         ByVal idObject As Long, _
                         ByVal idChild As Long, _
                         ByVal dwEventThread As Long, _
                         ByVal dwmsEventTime As Long)
                   
    Dim cls As String
    Dim sLn As Long
    
    cls = Space(255)
    ' Получаем имя класса окна
    sLn = GetClassName(hwnd, StrPtr(cls), Len(cls))
    
    If sLn Then
        
        cls = Left(cls, sLn)
        ' Форма подтверждения пароля
        If cls = "TFormConfirm" Then
            Dim hEdit   As Long
            Dim hBtn    As Long
            Dim hPanel  As Long
            ' Ищем контейнер
            hPanel = FindWindowEx(hwnd, 0, StrPtr("TElPanel"), 0)
            ' Ищем поле ввода пароля
            hEdit = FindWindowEx(hPanel, 0, StrPtr("TElEdit"), 0)
            ' Ищем кнопку ОК
            hBtn = FindWindowEx(hPanel, 0, StrPtr("TElPopupButton"), StrPtr("OK"))
            
            If CBool(hEdit) And CBool(hBtn) Then
                ' Вводим текст в поле ввода
                SendMessage hEdit, WM_SETTEXT, 0, ByVal StrPtr("пароль")
                ' Жмем на кнопку
                SendMessage hBtn, WM_LBUTTONDOWN, 1, ByVal 0
                SendMessage hBtn, WM_LBUTTONUP, 0, ByVal 0
                
            End If
            
        End If
        
    End If
    
End Sub
Вложения
Тип файла: rar EventHook.rar (2.1 Кб, 57 просмотров)
4
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 634
11.01.2015, 10:32  [ТС]
Анатолий Спасибо и Вам.
Коллеги Pro_grammer, The trick я могу Вас отблагодарить как то?

Добавлено через 2 часа 35 минут
Анатолий не совсем понял. Ваш код нужно дописывать?
Запустил, при открытом ОКНЕ приложения HB. Ничего не происходит..
0
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
11.01.2015, 10:40
Цитата Сообщение от kreotodr Посмотреть сообщение
Анатолий не совсем понял. Ваш код нужно дописывать?
Запустил, при открытом ОКНЕ приложения HB. Ничего не происходит..
Запускать надо до, ты же из своей программы запускаешь приложение "А", вот перед запуском и вставляй.
0
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 634
11.01.2015, 10:47  [ТС]
все действительно работает...
0
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 634
12.01.2015, 17:52  [ТС]
The trick Проект практически закончен. Осталась форма "о программе". Отладка и тестирование.

Руки стоят криво, красивого ничего не могу придумать. Если не лень киньте красивый пример "о программе".
Через поиск не нашел ничего...((
0
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
12.01.2015, 17:59
Project -> Add Form -> About Dialog
0
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 634
12.01.2015, 18:14  [ТС]
та это понятно, но там все "не очень"
хочется "стильного" )))
жутко нравится реализация этого в WinAmp, Aimp (ах)
0
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 634
12.01.2015, 18:21  [ТС]
Подскажите, а VB6 можно реализовать такие эффекты с текстом и рамками? (см. прилагаемые скины)
Такое впечатление, что они утопленные/объемные...
Миниатюры
Как из программы управлять другой, уже запущенной программой   Как из программы управлять другой, уже запущенной программой  
0
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
12.01.2015, 19:37
Лучший ответ Сообщение было отмечено kreotodr как решение

Решение

Ну у текста просто поставь фоновый цвет ButtonFace.
Второй - обычный фрейм.
Для рисования таких рамок обычно применяют функцию DrawEdge, Можешь просто поставить две линии (прямоугольника) со смещением в 1 пиксель с цветами ActiveBorder и InactiveBorder.
Цитата Сообщение от kreotodr Посмотреть сообщение
та это понятно, но там все "не очень"
хочется "стильного" )))
жутко нравится реализация этого в WinAmp, Aimp (ах)
Не знаю как в WinAmp, но у меня в Aimp'е простые титры.
Вложения
Тип файла: rar AboutTest.rar (2.5 Кб, 28 просмотров)
2
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 634
12.01.2015, 21:15  [ТС]
Спасибо со вкусом и юмором. Спасибо!

Добавлено через 18 минут
А можно ссылку на Taskbarlib
для
https://www.cyberforum.ru/blog... g2090.html
0
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
12.01.2015, 21:16
Цитата Сообщение от kreotodr Посмотреть сообщение
А можно ссылку на Taskbarlib
Там в архиве Taskbar.tlb.
0
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 124
16.01.2015, 19:21
Здравствуйте, у меня схожая задача: имеется окно авторизации с двумя полями (текстовое поле (пароль) + выпадающий список (пользователь) ) и одной кнопкой. Как мне определить хэндл этих полей для возможности ввода в них соответствующих строк (пароль и логин).

Visual Basic
1
2
' Ищем поле ввода пароля
hEdit = FindWindowEx(hPanel, 0, StrPtr("TElEdit"), 0)
Иначе говоря как мне определить название соответствующих полей StrPtr("TElEdit")

Спасибо!
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
16.01.2015, 19:52
Цитата Сообщение от Anforcer Посмотреть сообщение
как мне определить название соответствующих полей StrPtr("TElEdit")
В составе VS6 есть программа SPYXX.EXE. У меня лежит по пути...\Microsoft Visual Studio\COMMON\Tools\
Запускаешь, ищешь нужное окно программы в списке, открываешь и там буду все классы дочерних окон написаны в конце строки.
2
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 124
16.01.2015, 22:27
Сделал пример на VB два поля и кнопка. Вот параметры одного из них (см. приложение). Подскажите плизз как использовать полученные данные в команде FindWindowEx(hPanel, 0, StrPtr("TElEdit"), 0)
Миниатюры
Как из программы управлять другой, уже запущенной программой   Как из программы управлять другой, уже запущенной программой   Как из программы управлять другой, уже запущенной программой  

0
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
16.01.2015, 22:36
Цитата Сообщение от Anforcer Посмотреть сообщение
Сделал пример на VB два поля и кнопка. Вот параметры одного из них (см. приложение). Подскажите плизз как использовать полученные данные в команде FindWindowEx(hPanel, 0, StrPtr("TElEdit"), 0)
Не получится скорее всего (не утверждаю, т.к. нет возможности проверить). Нужно использовать AccessibleObjectFromWindow
Скинь сюда нужное приложение - скажу как сделать.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.01.2015, 22:36
Помогаю со студенческими работами здесь

Как можно управлять активным документом Word из другой программы?
в свое время стокнулся с особенностью Adobe PageMacker которая позволяла создать DDE канал и с помощью него отдавать команды активному...

Как отдать параметры (команды) уже запущенной проге с Ворда?
здравствуйте ' Запуск программы с параметрами ' SHELL "<полный путь к исполняемому файлу> парамер1 параметр2 ......

Как запустить программу и управлять программой?
Как запустить программу и управлять программой? Например после запуска программы установки какой нибудь программы, как программно нажать...

Как управлять чужой программой через delphi
вот хочу сделать для себя программу которая будет внедрятся в скайп и проверять если кто то написал более 10 сообщений за 20 сек то...

Как сделать чтоб читал тот класс который я задам уже в запущенной программе
В общем есть много таких вариантов private void apple() { ...... } private void book() { ...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru