Страница 1 из 2
Открыть окно командой из внешнего приложения
Добавлено: 10 Ноябрь 2015, 16:49
RaFaeL
Есть некая тулза для работы с АТС. В ней можно настроить поиск контакта в базе по номеру телефона и открытие карточки.
Если с первым все понятно (т.к. обычный MS SQL у нас) то как организовать второе? Т.е. есть настройка на запуск какого-то файла, а нам надо переключиться в активное приложение, передать туда параметр (лучше не один) и открыть в нем нужную форму. Как это реализовать со стороны приложения, в котором надо открыть форму? Как запустить новую копию приложения, понятно, но это не решение (долго очень)
Открыть окно командой из внешнего приложения
Добавлено: 10 Ноябрь 2015, 17:03
Admin
Мутно написал конечно. Если прилада твоя то что мешает запускать одну копию через мутексы например. Если запускаешь другую копию с параметром, находишь Handle уже запущеной и туда шлешь message, ловишь его в программе и открываешь окно.
Если чужая программа, тоже самое по сути можно сделать. Слать месаги для управления.
Еще посмотреть в сторону AutoHotkey.
Если я все правильно понял
Открыть окно командой из внешнего приложения
Добавлено: 10 Ноябрь 2015, 17:08
RaFaeL
То что на картинке - чужое. Открывать надо в моей, кларионовской
Если прилада твоя то что мешает запускать одну копию через мутексы например
Наверное ничего, а как это и что это?
Если запускаешь другую копию с параметром, находишь Handle уже запущеной и туда шлешь message, ловишь его в программе и открываешь окно.
Примерчики есть где посмотреть?
Открыть окно командой из внешнего приложения
Добавлено: 10 Ноябрь 2015, 17:24
Игорь Столяров
RaFaeL писал(а): Как это реализовать со стороны приложения, в котором надо открыть форму?
Ну по моему все сводится к тому же самому:
http://forum.clarionlife.net/phpbb/view ... %8B#p13757
RaFaeL писал(а): открыть в нем нужную форму.
После события OpenWindow или GainFocus посылаем Accept на открытие нужной формы ...
Открыть окно командой из внешнего приложения
Добавлено: 10 Ноябрь 2015, 17:38
RaFaeL
Не хватает примера, как передать в уже открытое приложение параметр и как там его принять...
Открыть окно командой из внешнего приложения
Добавлено: 10 Ноябрь 2015, 17:40
Дед Пахом
Что-то я не пойму, если приложение чужое, то с какой радости оно будет реагировать на твои сообщения?
Открыть окно командой из внешнего приложения
Добавлено: 10 Ноябрь 2015, 17:42
Игорь Столяров
RaFaeL писал(а): Не хватает примера, как передать в уже открытое приложение параметр и как там его принять...
Тупо записать в INI файл и потом считать ?

Открыть окно командой из внешнего приложения
Добавлено: 10 Ноябрь 2015, 17:43
RaFaeL
Дед Пахом писал(а): Что-то я не пойму, если приложение чужое, то с какой радости оно будет реагировать на твои сообщения?
В чужом я жму на кнопку, которая выполняет команду (или урл, но урл не подходит), в моем по этой кнопке-команде должно что-то произойти, что именно произойдет - это я уже допишу, главное этот самый вызов осуществить
Открыть окно командой из внешнего приложения
Добавлено: 10 Ноябрь 2015, 17:44
RaFaeL
Игорь Столяров писал(а):Тупо записать в INI файл и потом считать ?
Не, некрасиво...
Открыть окно командой из внешнего приложения
Добавлено: 10 Ноябрь 2015, 17:47
Игорь Столяров
RaFaeL писал(а): Не, некрасиво...
Через ветку реестра Windows. И не заморачиваться ...

Открыть окно командой из внешнего приложения
Добавлено: 10 Ноябрь 2015, 17:52
Дед Пахом
Игорь Столяров писал(а): Через ветку реестра Windows
А реестр проверять каждую секунду?
Мы для таких случаев пользуемся штукой под названием mailslot (есть в vuFileTools) -- создаём приёмник сообщений в одной программе, посылаем на этот "ящик" из другой. В C10 есть новый пример на ту же тему, вот только-только на конференции показывали.
Открыть окно командой из внешнего приложения
Добавлено: 10 Ноябрь 2015, 17:53
RaFaeL
Игорь Столяров писал(а): Через ветку реестра Windows. И не заморачиваться ...
В данном случае хотелось бы сделать по уму
находишь Handle уже запущеной и туда шлешь message, ловишь его в программе
вот как-то так, но я ничего не понял без примера
Открыть окно командой из внешнего приложения
Добавлено: 10 Ноябрь 2015, 18:05
Игорь Столяров
Дед Пахом писал(а): А реестр проверять каждую секунду?
Зачем ?
- Программа 1 записывает в реестр ПАРАМЕТР и переключает фокус на Программу 2
- Программа 2 получив фокус, проверяет наличие ПАРАМЕТРА в реестре, обрабатывает его (открывает форму и т.д.) и удаляет.
- Если в реестре нет ПАРАМЕТРА Программа 2 никаких действий не делает (просто запуск)
- Все ...
Открыть окно командой из внешнего приложения
Добавлено: 10 Ноябрь 2015, 18:07
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
Открыть окно командой из внешнего приложения
Добавлено: 10 Ноябрь 2015, 18:16
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