Форум: "Основная";
Текущий архив: 2002.06.10;
Скачать: [xml.tar.bz2];
ВнизПередача параметров запущенному приложению ... Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c