Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача данных другому приложению 
V
    Опции темы
former
  Дата 2.7.2007, 08:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 5
Всего: 17



Есть два приложения. Оба написаны мной.Первое приложение вызывает второе и должно передать значение некоторой переменной. Второе в свою очередь, если запускается отдельно, имеетстартовое окно (в событии onActivate главной формы) в котором выбираеся действие. Задача сосотоит в том, чтобы при запуске первым приложением второго стартовое окно не показывалось. Что-то типа следующей конструкции (я думаю):

Код

....

if Variable=0 then
  begin
      StartForm.ShowModal;
  end
else if Variable=1 then
  begin
      .....
  end;


Или есть другой метод?

Как реализовать передачу значения этой переменной?


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Rennigth
Дата 2.7.2007, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



former, А чем командная строка не устраивает?


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
former
Дата 2.7.2007, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 5
Всего: 17



Rennigth, поточнее, что ты имеешь виду?


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Alexeis
Дата 2.7.2007, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(former @  2.7.2007,  08:51 Найти цитируемый пост)
Как реализовать передачу значения этой переменной? 

  SendMessage();


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Rennigth
Дата 2.7.2007, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Цитата(former @  2.7.2007,  09:01 Найти цитируемый пост)
Rennigth, поточнее, что ты имеешь виду? 

Хм, то и имею. Сделай чтобы первое приложение запускало второе с параметром например:
Код

  WinExec('C:\test.exe HideSplash');

А во втором приложении анализировать ParamStr;
Код

If (ParamCount > 0) and (ParamStr(1) = HideSplash) then
  //Не показывать заставку
else
  //Показывать заставку





--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
former
Дата 2.7.2007, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 5
Всего: 17



Rennigth, спасибо за подсказку. Все получилось. Только в твоём коде кое-чего не хватает:

1. 
Код

  WinExec(PChar('C:\test.exe HideSplash'),SW_SHOW);


2. 
Код

If (ParamCount > 0) and (ParamStr(1) = 'HideSplash') then
  //Не показывать заставку
else
  //Показывать заставку


Так я думаю будет лучше. smile

А вариант какой лучше или надёжнее, Rennigth или Alexeis?

Добавлено через 2 минуты и 7 секунд
PChar написал, т.к. использовал следующую конструкцию:
Код

  WinExec(PChar(ExtractFilePath(paramstr(0))+'Project2.exe HideSplash'),SW_SHOW);



--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Rennigth
Дата 2.7.2007, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Цитата(former @  2.7.2007,  09:31 Найти цитируемый пост)
Только в твоём коде кое-чего не хватает:

Ну писал как наводку smile Вообще запускать лутше через CreateProcess, т.к. WinExec марально устарела.

Цитата(former @  2.7.2007,  09:31 Найти цитируемый пост)
А вариант какой лучше или надёжнее, Rennigth или Alexeis?


Мне кажется что в данном случае не целесообразно изобретать велосипед с SendMessage-м и WM_COPYDATA и т.д. когда для этого механизм передачи параметров через командную строку и служит. 


Это сообщение отредактировал(а) Rennigth - 2.7.2007, 09:42


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Alexeis
Дата 2.7.2007, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(Rennigth @  2.7.2007,  09:40 Найти цитируемый пост)
Мне кажется что в данном случае не целесообразно изобретать велосипед с SendMessage-м и WM_COPYDATA и т.д. когда для этого командная строка и служит. 

  Угу я не дочитал что первая запускает вторую.  smile  Более того когда дойдет WM_COPYDATA неизвестно, а командная строка будет передана сразу.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
former
Дата 2.7.2007, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 5
Всего: 17



Rennigth, Alexeis, спасибо за ваши рекомендации. Постараюсь разобраться и со вторым вариантом тоже.

И на последок.

Цитата(Alexeis @  2.7.2007,  09:44 Найти цитируемый пост)
Угу я не дочитал что первая запускает вторую.    Более того когда дойдет WM_COPYDATA неизвестно, а командная строка будет передана сразу. 


Т.е., если я правильно понял, если система перегружена процессами, то неизвестно вовремя ли произойдёт передача параметров?


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Alexeis
Дата 2.7.2007, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(former @  2.7.2007,  09:59 Найти цитируемый пост)
Т.е., если я правильно понял, если система перегружена процессами, то неизвестно вовремя ли произойдёт передача параметров? 

  Ага, сообщения обрабатываются асинхронно, но в порядке их поступления.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Rennigth
Дата 2.7.2007, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Цитата(former @  2.7.2007,  09:59 Найти цитируемый пост)
Т.е., если я правильно понял, если система перегружена процессами, то неизвестно вовремя ли произойдёт передача параметров? 


Ну да. К примеру если использовать вариант с передачей параметров через SendMessage:

Код

WinExec(PChar('C:\test.exe HideSplash'),SW_SHOW);

FindWindow(...) // Ищем главное окно второго приложения, и не факт что оно уже создано.
Sendmessage(hMainWindow, WM_COPYDATA, 0, (флаг какой-то)) еще не известно была ли проверка показывать или нет стартовое окно. Да и приложение вообще может не иметь окна которое будет принимать сообщение.

Вообщем чтобы пользоваться этим вариантом придется изобретать еще и велосипед с ожиданием приема параметра во втором приложении и ожиданием возможности  отправки передачи параметра у первого.


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
former
Дата 2.7.2007, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 5
Всего: 17



А приоритет сообщения менять никак нельзя?


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Rennigth
Дата 2.7.2007, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Цитата(former @  2.7.2007,  10:23 Найти цитируемый пост)
А приоритет сообщения менять никак нельзя? 

Чтобы это могло значить? Приоритет есть у процессов и потоков. Если ты имеешь ввиду как можно побыстрее прогнать очередь сообщений для какогото окна... То это исключительно зависит от загружености процесса. Сообщения он принимает грубо говоря в Idle, или можно в принимающем приложении вызвать Application.ProcessMessages. Но ситуцию это все равно не изменит. В данном случае используй передачу параметра через командную строку.


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
former
Дата 2.7.2007, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 5
Всего: 17



Всем спасибо. Тема закрыта.


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
MetalFan
Дата 2.7.2007, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



можно мое имхо? все-таки на то оно и WM_COPYDATA, чтобы данные между процессами передавать... а вот с ком.строкой как раз изврат.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0607 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.