Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.10;
Скачать: CL | DM;

Вниз

Передача параметров запущенному приложению ...   Найти похожие ветки 

 
ilysha ©   (2002-05-23 16:27) [0]

Вопрос собственно, не совсем такой, как в теме.

Есть статья на странице http://delphi.vitpc.com/helloworld/samples_win.htm , где в доступной форме рассказано, как предотвратить запуск второй версии, и как передать параметры уже запущенному приложению. Вообщем, как делает MS Word и прочие.

Но, если бы всё было так просто, я бы не стал в форуме вопрос писать.

Первый пример статьи показывает прекращение работы программы, если найдена уже запущенная версия. Проверка происходит до Application.Run и работает очень быстро и качественно.

Второй пример - другая концепция - запуск второй копии приложения, проверка, и отправка первой копии сообщения о восстановлении окна приложения и передача параметров командной строки, завершение работы приложения. Пример хороший, только когда приложение большое, а памяти на компьютере 32Мб ой как это долго просходит. Вот об этом автор примера почему-то не подумал...

Итак, у меня, в силу нехватки знаний (и я этого не стыжусь) не получается соединить два примера в один. Может быть, у кого-то есть готовый вариант решения?


 
PVOzerski ©   (2002-05-23 16:35) [1]

Да идея-то проста: перед тем, как завершить работу, 2-я копия приложения
должна послать окну 1-й копии некое сообщение, а уж какое и с какими
параметрами - зависит от задачи.


 
ilysha ©   (2002-05-23 16:49) [2]

>PVOzerski
Представь картину - размер исполняемого файла 6.5Мб, рабочая станция пользователя (Р-233/32Мб) на загрузку файла уходит около 30-40 секунд.
А если еще грузить вторую копию и зупускать - так лучше сразу застрелиться, заколоться, отравиться и утопиться.


 
PVOzerski ©   (2002-05-23 17:03) [3]

Основную часть проги засунь в DLL, которую динамически подгружай из маленького
стартового модуля. Если копия не 1-я, не доводи дело до загрузки DLL.


 
eSKey   (2002-05-23 19:08) [4]

Во, правильная мысль! Причем это надо вообще было сделать раньше, а не доводить до 6,5 мегов...


 
ilysha ©   (2002-05-24 08:39) [5]

> eSKey
> PVOzerski

Прочтите внимательнее заданный мною вопрос.


 
keg   (2002-05-24 10:35) [6]

Ты можешь написать маленькую бесформенную программу-стартер, которая будет искать нужное окно и если найдет такое, то передаст ему параметры, а если не найдет, то запустит нужную программу (например с помощью ShellExecute) и закроется. Вот пусть юзер её и запускает. Если тебе нужен пример такой программы - пиши.


 
ilysha ©   (2002-05-27 09:13) [7]

Спасибо keg, но сейчас именно так программа и работает, но это есть не очень красиво, то есть нехорошо.


 
leshy   (2002-05-27 17:44) [8]

Есть маленький, но сложный способ, я им пользовался один раз: создаётся отдельный модуль с CreateMutex (CreateFileMapping ...) в initialization и созданием объекта (в случае первой копии) с единственным методом AppMessage, который присваивается Application.OnMessage в файле проекта сразу после Application.Initialize. Метод этот обрабатывает сообщение от второй (третьей ...) копии запущенного приложения и хранит полученные данные в динамическом массиве. После полной загрузки приложения данные из динамического массива считываются в порядке поступления, Application.OnMessage переприсваивается и объект уничтожается навсегда.

Соответственно, ссылка на модуль ставится первой в файле проекта, при этом сам модуль ссылается только на system, а все остальные объявления сделаны прямо в нём. Все остальные модули, по необходимости ссылаются на этот модуль.

Передавать данные нужно окну приложения, а не MainForm.

У меня загрузка программы длилась около 30 секунд, а открытие файлов начиналось только после полной загрузки всех внешних модулей по MainForm.OnActivate при ненулевом размере динамического массива. Соответственно, отработка второй копии начиналась ещё до инициализации объекта приложения и была построена по очень сложному принципу передачи данных с предварительной проверкой и последующим подтверждением.


 
leshy   (2002-05-27 18:32) [9]

Кстати, у меня пример с DSKView работает не так, как обещано, о чем я писал в Королевство. Я смотрел его уже после того, как сдал программу, и хотел использовать его принцип немножко в других целях, да обломился.


 
ilysha ©   (2002-05-30 09:35) [10]

Спасибо. Обрабатываю информацию.



Страницы: 1 вся ветка

Текущий архив: 2002.06.10;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.016 c
6-30962
Фредди
2002-03-28 22:20
2002.06.10
Кто нибудь писал веб-сервер на Дельфи?


1-30882
IPisk
2002-05-29 10:21
2002.06.10
Прога, скомпиленная на Delphi 3, и процессор 1200 МГц


3-30716
Behemoth
2002-05-17 13:01
2002.06.10
Помогите разобраться с BDE


1-30896
dimich
2002-05-30 09:01
2002.06.10
Вопрос про TreeView


1-30831
str
2002-05-28 22:03
2002.06.10
Расчет инеграла