Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
4-31062
Serg!
2002-04-08 11:02
2002.06.10
перенаправление ввода/вывода


14-31004
Подонок
2002-05-07 15:46
2002.06.10
Кто знает злачные места в Питере?Где женского пола много.


1-30816
Rom-k
2002-05-31 14:29
2002.06.10
ASCII-codes


14-30994
mifi
2002-05-06 19:50
2002.06.10
пошарив DLL выдала все функции


1-30753
Great DAN
2002-05-30 13:48
2002.06.10
Как переслать данные или содержимое переменной





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский