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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача параметров между приложениями 
V
    Опции темы
aktuba
  Дата 19.10.2006, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


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

Репутация: 16
Всего: 38



Такой вопрос: запущены две копии одной и той-же программы с разными параметрами коммандной строки:

1. c:/app.exe /strings_1
2. c:/app.exe /strings_2

Как из второй программы, которая запущена позже, передать данные коммандной строки в первую программу?
 smile 


--------------------
user posted image
PM MAIL WWW Skype   Вверх
Alexeis
Дата 19.10.2006, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



1) Через буфер обмена
2) Через пересылку сообщений
3) Через DDE
4) Через OLE




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

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

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


Смышленный
***


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

Репутация: 16
Всего: 38



1. Буфер обмена не подходит, т.к. не очень хорошо портить данные пользователя.
2. Сообщения - то, что надо. Но у меня мало опыта в этом. Как с помощью сообщений передать строку?
3 и 4. Не знаю... Вообще никогда с этим не работал. Может это лучше чем сообщения? Есть примеры?

Добавлено @ 22:21 
в DelphiWorld нашел пример:

получатель: 

Код

procedure ReceiveMessage (var Msg: TMessage);
message WM_COPYDATA;
...
procedure TFormReceive.ReceiveMessage;
var
  pcd: PCopyDataStruct;
begin
  pcd := PCopyDataStruct(Msg.LParam);
  Caption := PChar(pcd.lpData);
end;


отправитель:
 
Код

procedure TFormXXX.Button1Click(Sender: TObject);
var
  cd: TCopyDataStruct;
begin
  cd.cbData := Length(Edit1.Text) + 1;
  cd.lpData := PChar(Edit1.Text);
  SendMessage(FindWindow('TFormReceive', nil), WM_COPYDATA, 0, LParam(@cd));
end;


А еще какие есть способы?


--------------------
user posted image
PM MAIL WWW Skype   Вверх
Alexeis
Дата 19.10.2006, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Цитата(aktuba @  19.10.2006,  22:09 Найти цитируемый пост)
1. Буфер обмена не подходит, т.к. не очень хорошо портить данные пользователя.

В NT системах, можно и не портить. Там можно сколько угодно объектов пихать, и так же вытаскиать.

С сообщениями принцип таков. Регистрируется сообщение с номером WM_USER + N, где N некоторое число. Строка разбивается на слова по 4 байта и слова записываются в Lparam и wParam. 
В программе приемнике пишется обработчик который их собирает в строку.

Добавлено @ 22:34 
DDE уже устарело, но служит именно для этой цели. Про него можно прочитать во многих книгах.
OLE довольно сложная технология требующая создания сервера и клиента. Подключение можно производить динамически.


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

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

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


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(alexeis1 @  19.10.2006,  22:27 Найти цитируемый пост)
WM_USER + N
Нет. Строка передаётся через WM_COPYDATA.
Через WM_USER её не передать.
Примеров на форуме масса. Нужно только в строке поиска набрать WM_COPYDATA
PM MAIL   Вверх
Alexeis
Дата 19.10.2006, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Цитата(Snowy @  19.10.2006,  22:54 Найти цитируемый пост)
Через WM_USER её не передать

Почему? Я вроде такое тоже встречал, вот только сейчас не могу найти.


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

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

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


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



Цитата(Snowy @  19.10.2006,  21:54 Найти цитируемый пост)
Через WM_USER её не передать.

имхо если извратится то можно smile


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Snowy
Дата 19.10.2006, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Нельзя передать между приложениями.
Внутри одного процесса можно. Между процессами - нет.
У них области памяти разные. 
Для этого и придумана WM_COPYDATA - для упрощения процесса.
Она создаёт MM файл, копирует туда данные, передаёт другому процессу, ждёт возврата, уничтожает MM файл.
Специальное сообщение - чтобы всё это руками не делать.

Добавлено @ 23:14 
Ага. Не дочитал твой вариант до конца.
Так конечно тоже можно. Но это нерациональный вариант.
WM_COPYDATA куда проще.

Добавлено @ 23:24 
А вот и готовый примерчик:
http://forum.vingrad.ru/index.php?showtopi...st&p=642109
PM MAIL   Вверх
Sansa
Дата 20.10.2006, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: 3
Всего: 6



В JVCL есть модуль JvAppInst.pas. В нем реализован компонент, который определяет, одна ли копия приложения запущена, и что делать, если их несколько.
--------------------
- Здравствуйте, я Ваш патологоанатом
PM MAIL ICQ   Вверх
BUGOR
Дата 20.10.2006, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 12.3.2006

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



Цитата

А еще какие есть способы?


Анонимные пайпы
Глобальные атомы
Мэилслоты
Ну и именованые Memory Mapped File регионы(что кстати и использует WM_COPYDATA)

Но в обычных рядовых ситуациях конечно WM_COPYDATA очень хорошо подходит.


--------------------
Живу недоумевая, всё время хочу понять...
http://hunger.ru 
PM MAIL WWW ICQ   Вверх
Gawron
Дата 21.9.2008, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 21.9.2008

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



Стандартные средства для работы с DDE в Делфи позволяют передавать типы PChar и TStrings. А как можно организовать передачу данных другого типа через DDE (а именно: массив чисел типа Integer или Real)? Есть ли какие-либо компоненты для работы с DDE, позволяющие организовать такую передачу?
PM MAIL   Вверх
aktuba
Дата 21.9.2008, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


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

Репутация: 16
Всего: 38



Gawron, а новый пост создать не судьба, вместо того, чтобы поднимать пост 2006-го года?


--------------------
user posted image
PM MAIL WWW Skype   Вверх
Alexeis
Дата 21.9.2008, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



aktuba, все нормально. Вопрос по теме. Зачем плодить сущности. 
Gawron, PChar это ж просто указатель на буфер в памяти. Туда можно записать все что хош smile . Потом просто приведи указатель к нужному типу и все.


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

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

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


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 21.9.2008

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



Спасибо. А не будет никаких сбоев, если к общему массиву (целых чисел) будут обращаться сразу два разных приложения?
PM MAIL   Вверх
Alexeis
Дата 24.9.2008, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Цитата(Gawron @  24.9.2008,  09:31 Найти цитируемый пост)
Спасибо. А не будет никаких сбоев, если к общему массиву (целых чисел) будут обращаться сразу два разных приложения? 

  Если только читать, то проблем быть не должно.


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

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

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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