Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.02.2007, 13:51   #11
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Один из вариантов:
1. в onactivate главной формы записываем значение handle окна в реестр (это абсолютно не обязательно, так как впринципе можно этот handle получить с помощью findwindow)
1.1 если использовать такой способ хранения handle , то в событии onclosequery главной формы необходимо handle в реестре обнулять.
2. в коде самого проекта пишем:
function Check: boolean;
begin
HM := OpenMutex(MUTEX_ALL_ACCESS, false, 'MyOwnMutex');
Result := (HM <> 0);
if HM = 0 then HM := CreateMutex(nil, false, 'MyOwnMutex');
end;
функция вернет true или false соответственно, если true , то копия программы уже запущена

потом что-нибудь вроде этого пишем:
if (Check)and(paramcount>0)and(han>0) then
begin
with data do
begin
dwData := 0;
cbdata:=strlen(pchar(paramstr(1)))+ 1;
lpData:=pchar(paramstr(1));
end;
SendMessage(han, WM_COPYDATA,application.Handle,long int(@data));
Exit;
end;
здесь соответственно идет проверка на наличие параметров коммандной строки, которую ты можешь убрать или заменить на необходимую тебе , в переменной han хранится handle главного окна первой копии приложения.
соответственно в lpdata ты можешь записать все что тебе необходимо.
Теперь подкорректируем код модуля главной формы:

protected
procedure workparam (s:string);
procedure MessageReceiver(var msg: TWMCopyData); message WM_COPYDATA;
.......
я реализовывал таким образом:

procedure tfstart.MessageReceiver(var msg: TWMCopyData);
var
sText: array[0..99] of Char;
begin
StrLCopy(sText, Msg.CopyDataStruct.lpData, Msg.CopyDataStruct.cbData);
showmessage('Передается управление полученной команде');
workparam(stext);
end;
procedure tfstart.workparam (s:string);
var sp:string;
k,i:integer;
begin
здесь соответственно обрабатываешь полученную строку как тебе угодно .
end;


Этот пример предназначен для общения второй копии приложения с первой копией
Для получения обратного эффекта, тоесть при запуске второй копии чтобы первая что- то "сообщала" запущеной копии тебе необходимо: при получении первой копией приложения сообщения с неким "заготовленным текстом" и, предположим, handle-ом окна второй копии, она будет отправлять на этот handle некое сообщение, описывающее то, чт ос ней сейчас происходит, и при получении такого "зарезирвированного" сообщения вторая копия должна будет привести себя в "надлежащий вид".
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 08.02.2007, 08:13   #12
Gudzon
 
Аватар для Gudzon
 
Регистрация: 06.02.2007
Сообщений: 7
По умолчанию

Чуваки ААААААААА я нашел решение этой задачи!!!
Только оно отличается от ваших.
Но всем спасибо за помощ!!! Я узнал много нового! СПАСИБО!
да прибудет с тобой сила
Gudzon вне форума Ответить с цитированием
Старый 08.02.2007, 08:19   #13
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Поделитесь, или исходники дайте.
zetrix вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача параметров aesoem Общие вопросы Delphi 8 15.07.2008 21:51
CDialog передача параметров! mahsus Общие вопросы .NET 4 09.03.2008 17:40
Сохранение параметров программы... Roof Общие вопросы Delphi 10 11.10.2007 08:22
Передача параметров программе при её запуске troo Общие вопросы Delphi 7 13.05.2007 21:22
передача объектов как параметров функций в Dll Umen Общие вопросы Delphi 9 12.11.2006 19:31