|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
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 |
Регистрация: 06.02.2007
Сообщений: 7
|
Чуваки ААААААААА я нашел решение этой задачи!!!
Только оно отличается от ваших. Но всем спасибо за помощ!!! Я узнал много нового! СПАСИБО!
да прибудет с тобой сила
|
08.02.2007, 08:19 | #13 |
Delphi/C++/C#
Участник клуба
Регистрация: 29.10.2006
Сообщений: 1,972
|
Поделитесь, или исходники дайте.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Передача параметров | 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 |