Открыть окно командой из внешнего приложения

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

Открыть окно командой из внешнего приложения

Сообщение RaFaeL »

Есть некая тулза для работы с АТС. В ней можно настроить поиск контакта в базе по номеру телефона и открытие карточки.
ilink.png
Если с первым все понятно (т.к. обычный MS SQL у нас) то как организовать второе? Т.е. есть настройка на запуск какого-то файла, а нам надо переключиться в активное приложение, передать туда параметр (лучше не один) и открыть в нем нужную форму. Как это реализовать со стороны приложения, в котором надо открыть форму? Как запустить новую копию приложения, понятно, но это не решение (долго очень)
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Открыть окно командой из внешнего приложения

Сообщение Admin »

Мутно написал конечно. Если прилада твоя то что мешает запускать одну копию через мутексы например. Если запускаешь другую копию с параметром, находишь Handle уже запущеной и туда шлешь message, ловишь его в программе и открываешь окно.
Если чужая программа, тоже самое по сути можно сделать. Слать месаги для управления.
Еще посмотреть в сторону AutoHotkey.
Если я все правильно понял
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

Открыть окно командой из внешнего приложения

Сообщение RaFaeL »

То что на картинке - чужое. Открывать надо в моей, кларионовской
Если прилада твоя то что мешает запускать одну копию через мутексы например
Наверное ничего, а как это и что это? :)
Если запускаешь другую копию с параметром, находишь Handle уже запущеной и туда шлешь message, ловишь его в программе и открываешь окно.
Примерчики есть где посмотреть?
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7373
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Открыть окно командой из внешнего приложения

Сообщение Игорь Столяров »

RaFaeL писал(а): Как это реализовать со стороны приложения, в котором надо открыть форму?
Ну по моему все сводится к тому же самому:
http://forum.clarionlife.net/phpbb/view ... %8B#p13757
RaFaeL писал(а): открыть в нем нужную форму.
После события OpenWindow или GainFocus посылаем Accept на открытие нужной формы ...
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

Открыть окно командой из внешнего приложения

Сообщение RaFaeL »

Не хватает примера, как передать в уже открытое приложение параметр и как там его принять...
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3133
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Открыть окно командой из внешнего приложения

Сообщение Дед Пахом »

Что-то я не пойму, если приложение чужое, то с какой радости оно будет реагировать на твои сообщения?
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7373
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Открыть окно командой из внешнего приложения

Сообщение Игорь Столяров »

RaFaeL писал(а): Не хватает примера, как передать в уже открытое приложение параметр и как там его принять...
Тупо записать в INI файл и потом считать ? ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

Открыть окно командой из внешнего приложения

Сообщение RaFaeL »

Дед Пахом писал(а): Что-то я не пойму, если приложение чужое, то с какой радости оно будет реагировать на твои сообщения?
В чужом я жму на кнопку, которая выполняет команду (или урл, но урл не подходит), в моем по этой кнопке-команде должно что-то произойти, что именно произойдет - это я уже допишу, главное этот самый вызов осуществить
Последний раз редактировалось RaFaeL 10 Ноябрь 2015, 17:47, всего редактировалось 1 раз.
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

Открыть окно командой из внешнего приложения

Сообщение RaFaeL »

Игорь Столяров писал(а):Тупо записать в INI файл и потом считать ?
Не, некрасиво...
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7373
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Открыть окно командой из внешнего приложения

Сообщение Игорь Столяров »

RaFaeL писал(а): Не, некрасиво...
Через ветку реестра Windows. И не заморачиваться ... :)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3133
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Открыть окно командой из внешнего приложения

Сообщение Дед Пахом »

Игорь Столяров писал(а): Через ветку реестра Windows
А реестр проверять каждую секунду?
Мы для таких случаев пользуемся штукой под названием mailslot (есть в vuFileTools) -- создаём приёмник сообщений в одной программе, посылаем на этот "ящик" из другой. В C10 есть новый пример на ту же тему, вот только-только на конференции показывали.
С уважением, ДП
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

Открыть окно командой из внешнего приложения

Сообщение RaFaeL »

Игорь Столяров писал(а): Через ветку реестра Windows. И не заморачиваться ...
В данном случае хотелось бы сделать по уму
находишь Handle уже запущеной и туда шлешь message, ловишь его в программе
вот как-то так, но я ничего не понял без примера
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7373
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Открыть окно командой из внешнего приложения

Сообщение Игорь Столяров »

Дед Пахом писал(а): А реестр проверять каждую секунду?
Зачем ?
- Программа 1 записывает в реестр ПАРАМЕТР и переключает фокус на Программу 2
- Программа 2 получив фокус, проверяет наличие ПАРАМЕТРА в реестре, обрабатывает его (открывает форму и т.д.) и удаляет.
- Если в реестре нет ПАРАМЕТРА Программа 2 никаких действий не делает (просто запуск)
- Все ...
За теми кто отстал - не возвращаться. (С) Кодекс
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Открыть окно командой из внешнего приложения

Сообщение gopstop2007 »

когда то был поиск по чужой эл. карте, давно было

Код: Выделить всё

 cWindowText = 'Электронная бизнес-карта.' 
 cClassName = 'TMainForm'  
 hwndMain = FindWindow(cClassName,cWindowText) ! Находим окно
IF hwndMain > 0  ! если окно есть
           hwnd = GetWindow(hwndMain,GW_CHILD)   ! влазим глубже на на нужное окно
           hwnd = GetWindow(hwnd,GW_HWNDNEXT)  ! и так далее по списку пока не станем на нужное окно :)
           hwnd = GetWindow(hwnd,GW_HWNDNEXT)
           hwnd = GetWindow(hwnd,GW_HWNDNEXT)
           hwnd = GetWindow(hwnd,GW_HWNDNEXT)
           hwnd = GetWindow(hwnd,GW_HWNDNEXT)
           hwnd = GetWindow(hwnd,GW_CHILD)
           hwnd = GetWindow(hwnd,GW_HWNDNEXT)
           hwnd = GetWindow(hwnd,GW_HWNDNEXT)
           hwnd = GetWindow(hwnd,GW_CHILD)
           hwnd = GetWindow(hwnd,GW_CHILD)
           hwnd = GetWindow(hwnd,GW_HWNDNEXT)
           hwnd = GetWindow(hwnd,GW_HWNDNEXT)
           hwnd = GetWindow(hwnd,GW_HWNDNEXT)
           hwnd = GetWindow(hwnd,GW_HWNDNEXT)
           hwnd = GetWindow(hwnd,GW_HWNDNEXT)
           hwnd = GetWindow(hwnd,GW_CHILD)
           hwnd = GetWindow(hwnd,GW_CHILD)
           hwnd = GetWindow(hwnd,GW_HWNDNEXT)
           hwnd = GetWindow(hwnd,GW_HWNDNEXT)
           hwnd = GetWindow(hwnd,GW_CHILD)

           SendMessage(hwnd,WM_LBUTTONDOWN,MK_LBUTTON,50 + BSHIFT(50, 16)) ! -------------
           sleep(100)                                                      ! Фокусировка
           SendMessage(hwnd,WM_LBUTTONUP,0,0)                              ! На списке
ELSE
          MESSAGE('Окно ненайдено Запустите программу!')
END
 
Последний раз редактировалось gopstop2007 10 Ноябрь 2015, 18:27, всего редактировалось 1 раз.
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Открыть окно командой из внешнего приложения

Сообщение gopstop2007 »

Это типа имитация нажатий из Вашей программы в ...

Код: Выделить всё

              IF Loc::PressAltKey = 0
                 SendMessage(hwnd,WM_IME_KEYDOWN,Loc::ScanCode,0) ! послать по одной букве
              ELSE
                 keybd_event(VK_LSHIFT,42,KEYEVENTF_EXTENDEDKEY,0)                   ! нажать SHIFT
                 SendMessage(hwnd,WM_IME_KEYDOWN,Loc::ScanCode,0)                    ! нажать букву
                 sleep(100)
                 keybd_event(VK_LSHIFT,42,KEYEVENTF_EXTENDEDKEY + KEYEVENTF_KEYUP,0) ! отпустить SHIFT
                 !Message(1Dh)
              END
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Ответить