![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Передача переменных в работающее приложение [D6, D7]
Alex_Y © (2003-08-29 12:32:00)
Как заставить своё открытое приложение отработать с новыми параметрами?
У меня работает программа Myprog.exe с параметером param1.
Я хочу, чтобы она продолжала работать, но с параметром param2.
Аналогичный пример: Перезапуск открытого окна IE с новым адресом.
Есть ещё вариант: некоторые MDI приложения могут открывать дополнительные дочерние окна при повторных вызовах из командной строки с параметрами.
Alex_Y (2003-08-29 16:52:00) [1]
>N169
Если возможно, пример кода, пожалуйста.
N169 (2003-08-29 15:28:00) [2]
>Какие возможны другие варианты?
Общая структура данных в file mapping. Плюс 2 именованных события event, одно на синхронизацию записи в эту структуру ("арбитр"), другое как сигнализатор изменения ("request", запрос выполнения действия).
Всегда так делаю, пока без проблем.
Maratvg (2003-08-29 13:38:00) [3]
Время отклика можно победить посылая дополнительно обыкновенное сообщение первой копии приложения, что-то типа "прочитай новые данные из слота".
HolACost! (2003-08-29 13:35:00) [4]
Возможен сообще интересный вариант - WM_COPYDATA например!
Работает нормально, но только с самими ресурсами, которые будешь перемещать могут быть проблемы, т.к. тперегкидывать будешь адреса...
Есть вариант C маппированными в память файлами !
Alex_Y (2003-08-29 13:30:00) [5]
Насколько видно из форумов, при использовании MailSlot тоже возможны проблемы. В частности, времени отклика и настроек конкретного компьютера.
В принципе, простое завершение 1 экземпляра приложения и запуск 2-го работает стабильно, но о-очень медленно. Какие возможны другие варианты?
Например, возможно ли при запуске 2-го экземпляра инициировать событие в 1-м, при этом заменив значение некоторых переменных в 1-м из 2-го?
Maratvg (2003-08-29 13:10:00) [6]
вот как раз в win32 и написано про MailSlot.
Смотреть надо функцию CreateMailSlot и рядом с ней.
Работает как очередь сообщений, только можно передавать все что угодно в любых количествах.
Alex_Y (2003-08-29 13:06:00) [7]
>Maratvg
Простите, что такое MailSlot+ ?
>clickmaker ©
WM_CHANGEPARAM не обнаружил в Win32.hlp, поэтому не совсем (точнее, совсем не) понял, чем и куда его посылать.
Maratvg (2003-08-29 12:40:00) [8]
Для передачи информации из второй копии приложения в первую я использую MailSlot + нотификация первой копии через PostMessage.
clickmaker (2003-08-29 12:40:00) [9]
При запуске (перед Application.Run) определять, запущено ли уже, с помощью FindWindow например. Если да, то не создавать новый экземпляр, а посылать определенное тобой сообщение найденному окну, типа WM_CHANGEPARAM и сам Param в wParam или LParam. Ну а дальше - дело техники