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

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

07.01.2015, 18:41. Показов 9001. Ответов 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
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
07.01.2015, 18:56
Что за приложение А?
0
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 634
07.01.2015, 21:20  [ТС]
Речь идет о "Домашняя бухгалтерия 5"
http://www.keepsoft.ru/homebuh_download.htm
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
07.01.2015, 21:53
Вариантов масса. Если приложение написано на .NET, то можно попробовать сделать на уровне COM/ActiveX, или же сделать через MAPI, или если это HTML-страница через соответствующие механизмы.
0
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 634
07.01.2015, 22:04  [ТС]
Спасибо за ответ. Пишу на VB 6.
Если честно, понял суть. Реализация не ясна (нуб, нубом) Можно набросать код...
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
07.01.2015, 23:03
В определенный момент
Как программа определит этот момент?
Наверное надо проверять по таймеру наличие определённого окна по его заголовку
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
07.01.2015, 23:04
Alex77755, пока ТС не ответит на чем написано приложение "А" и вообще являются ли окнами контролы, ответа дать нельзя.
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
07.01.2015, 23:14
The trick, как ТС определит на чём написана программа?
Она рапростаняется в виде установщика.
После установки работает как оконное приложение
Имеет как минимум 3 окна
Миниатюры
Как из программы управлять другой, уже запущенной программой   Как из программы управлять другой, уже запущенной программой  
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
07.01.2015, 23:22
Цитата Сообщение от Alex77755 Посмотреть сообщение
The trick, как ТС определит на чём написана программа?
Частично (но не всегда) это можно узнать по классу окон в приложении.
Есть много методов.
  • Например, если приложение написано на дотнете то можно сделать очень просто получив соответствующие объекты через AccessibleObjectFromWindow как тут.
  • Если окно выполнено на базе HTML, то можно сделать например как тут.
  • Если элементы являются окнами, то можно сделать через MAPI (WM_SETTEXT, BM_CLICK и т.д.)
  • Если элементы являются ActiveX контролами можно сделать по-другому.
  • Если ...
  • ...
  • ...
Задача интересная, но у меня нет времени разбираться и делать ее за ТС. Я дал ему подсказку, пускай подумает.
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
08.01.2015, 00:01
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

По крайней мере окно "О программе" находится.
А вот в какой момент приложение выдаст запрос я не знаю.

Добавлено через 31 минуту
Контроль появления окна
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
Option Explicit
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetWindow Lib "user32" _
   (ByVal hwnd As Long, ByVal wCmd As Long) As Long
   Private Declare Function GetWindowTextLength Lib "user32" _
   Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long
   Private Declare Function GetWindowText Lib "user32" _
   Alias "GetWindowTextA" (ByVal hwnd As Long, _
                           ByVal lpString As String, _
                           ByVal cch As Long) As Long
Const GW_HWNDNEXT = 2
Const GW_CHILD = 5
Dim strCaption As String
Dim dummy&
Dim PT As String
   
Private Sub Часы1_Timer()
    Dim i
     Список1.Clear
           Dim strCaption As String
           Dim hwnd&
    hwnd& = GetDesktopWindow()
    hwnd& = GetWindow(hwnd&, GW_CHILD)
          Caption = ""
    Do
    dummy& = GetWindowTextLength(hwnd&)
    If dummy <> 0 Then
            strCaption = String(dummy + 1, " ")
            dummy = GetWindowText(hwnd&, strCaption, dummy + 1)
            If InStr(1, strCaption, "Подтверждение", vbTextCompare) > 0 Then
                 Caption = "Есть окно"
                 exit sub
    '            MsgBox hwnd& & "  -  " & strCaption, 64, ""
            End If
     End If
    hwnd& = GetWindow(hwnd&, GW_HWNDNEXT)
    Loop While hwnd& <> 0
End Sub
1
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 634
08.01.2015, 11:31  [ТС]
Спасибо!
Попробовал внедрить код a форму. При наличии окна "Подтверждение". Все отлично детектится. Ура задача решена на 50%. Теперь вопрос стоит как забросить из буфера данные в поле "ввода пароля" и нажать на конопку "OK"

Кстати, а зачем этот кусок кода

''Список1.Clear'
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
08.01.2015, 18:16
Знаешь что такое рудименты?
Типа не нужные остатки от старых кодов
0
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 634
08.01.2015, 20:54  [ТС]
Коллеги The trick, Alex77755 программа (приложение "А") написана Delphi. Это поможет?

Добавлено через 30 минут
Или просьба перевести на "человеческий" язык вот это...

" Берём Spy++, подглядываем ID интересующих нас EDIT и BUTTON (если, конечно, это не рисованные окна Qt, например), затем для каждого дочернего проверяемых класс и ID -- GetDlgCtrlID."

Добавлено через 7 минут
Даже нашел текст кода на стороннем русурсе..
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" ( _
    ByVal hwndParent As Long, _
    ByVal hwndChildAfter As Long, _
    ByVal pszClass As String, _
    ByVal lpszWindow As String) As Long
 
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As Long
 
Private Const BM_CLICK = &HF5
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _
    ByVal hWnd As Long, _
    ByVal Msg As Long, _
    ByVal wParam As Long, _
    lParam As Any) As Long
как это все связать...
0
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 634
09.01.2015, 11:42  [ТС]
кроме того нашел с помощью Spy++.
ребята помогите связать все это вместе...
Миниатюры
Как из программы управлять другой, уже запущенной программой  
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
09.01.2015, 13:14
Цитата Сообщение от kreotodr Посмотреть сообщение
кроме того нашел с помощью Spy++.
Не надо тебе этого.
Всё правильно в сообщении выше:
FindWindow - запускай в таймере, ищем появление окна "Подтверждение", как окно нашли ищем FindWindowEx кнопку, на которую будем нажимать, и поле, куда вводить данные, EDIT и BUTTON там единственные.
Поле ввода EDIT там в фокусе видать,( если нет, то сделать так) значит SendKeys поможет пароль написать.
После ввода пароля BM_CLICK на кнопочку нажмёт.
Всё же просто?

Код написать 10 минут, но надо знать имя жертвы. Конкретно определить EDIT и BUTTON надо, по кнопкам вижу , что Делфи, там всё просто.
0
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 634
09.01.2015, 21:07  [ТС]
Так в этом то и проблема, что для меня этот "темный лес." Можно вас просить о помощи...????

Добавлено через 38 секунд
Жертва вот
Речь идет о "Домашняя бухгалтерия 5"
http://www.keepsoft.ru/homebuh_download.htm
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
10.01.2015, 17:01
Цитата Сообщение от kreotodr Посмотреть сообщение
Жертва вот
Речь идет о "Домашняя бухгалтерия 5"
Всё разобрался.
Вот готовый код. Надо на форму положить кнопку и таймер с интервалом пусть будет 300.
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
Dim NameProg As String
 
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Sub Command1_Click()
 NameProg = "C:\Program Files\Keepsoft\HomeBuh5\HomeBuh5.exe"    ' путь к жертве
ret = Shell(NameProg, vbNormalFocus)
Timer1.Enabled = True
End Sub
 
Private Sub Timer1_Timer()
 
hnd = FindWindow("TFormConfirm", vbNullString) ' ищем окно с паролем
  If hnd > 0 Then
            Timer1.Enabled = False
      SendKeys "12345" ' Тут пароль настоящий!
            Sleep 500
      SendKeys "{TAB}" ' фокус на кнопку
           Sleep 500
      SendKeys "{ENTER}" ' Жмем кнопку ОК
 
 End If
 
End Sub
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
10.01.2015, 17:05
Pro_grammer, так нельзя делать. Есть специальное сообщение WM_SETTEXT и функция FindWindowEx для поиска дочерних окон, вот их и нужно использовать.
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
10.01.2015, 17:09
Цитата Сообщение от The trick Посмотреть сообщение
так нельзя делать
Обоснуй! У меня работает как часы, минимум API, всего 20 строчек кода.
Твои аргументы?
Цитата Сообщение от The trick Посмотреть сообщение
Есть специальное сообщение WM_SETTEXT и функция FindWindowEx для поиска дочерних окон, вот их и нужно использовать.
Ну так попробуй
P.s. Я так именно вначале и поступил, но ... В общем есть но, которое мне не понравилось. Хотя с удовольствием посмотрю на твое альтернативное решение, если не слабо.
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
10.01.2015, 17:25
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Обоснуй! У меня работает как часы, минимум API, всего 20 строчек кода.
Твои аргументы?
1. Если пароль имеет кириллицу, а текущая раскладка приложения - En.
2. Если стоят программы типа PuntoSwitcher и им подобные, перехватывающие клаву.
3. Если вдруг на фон вылезет какое-либо окно с оповещением, типа UAC, или разрыв интернета и им подобным, или вылезло окно с ошибкой.
4. Если пользователь жмет какие либо кнопки в данный момент.
5. еСЛИ ВКЛЮЧЕН cAPSlOCK или нажат Shift или нажата Win.
6. Если активно другое полноэкранное приложение во время работы этого лоадера.
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Ну так попробуй
P.s. Я так именно вначале и поступил, но ... В общем есть но, которое мне не понравилось. Хотя с удовольствием посмотрю на твое альтернативное решение, если не слабо.
Мне интересно что тебе не понравилось. Да мне не слабо, но зачем? Здесь уже было подобное просто поискать по ключевым словам которые я дал.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.01.2015, 17:25
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru