Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.22;
Скачать: CL | DM;

Вниз

Передать параметр первой копии программы   Найти похожие ветки 

 
tsarevep ©   (2002-07-10 02:41) [0]

Здравствуйте всем!
Ребят поможите, а то зациклился совсем.
Вообщем програма SDI интерфейс, с возможностью открытия нескольких документов. Повторный экземпляр программы недопстим и не должен быть нужен. Когда с програмной строки запускаю на открытие документ, то все прекрасно открывается, но если программа уже запущена, естественно ParamStr идёт для второй копии. И просто закрывается второй экземпляр.
Подскажите плиз как передать этот параметр первой копии программы.
С уважением.


 
tsarevep ©   (2002-07-10 10:10) [1]

Ну разве никто этим не занимался?
С уважением.


 
Fiend ©   (2002-07-10 10:13) [2]

я делал так:
при загрузке экземпляра искал окно предидущего инстанса. Затем посылал ему по хэндлу сообщение с параметрами. Если нада могу вырезать текст


 
tsarevep ©   (2002-07-10 10:49) [3]

Конечно б надо!
Спасибо заранее.


 
Fiend ©   (2002-07-10 10:57) [4]

const WM_MESSAGETOSERVER = WM_USER+1;

type
TMainForm = class(TForm)
private
{ Private declarations }
procedure MESSAGETOSERVER(var Message: TMessage); message WM_MESSAGETOSERVER;
public
{ Public declarations }
end;

procedure TMainForm.MESSAGETOSERVER(var Message: TMessage);
begin
//Это обработчик пользовательского события
case Message.WParam of
1 : pmShutDownServerClick(nil);
2 : pmStopServerClick(nil);
3 : StartServer;
end;
end;

А это функция которая ищет окно прдидущего инстанса, если находит возвращает его хэндл, если нет то 0

function FindHwnd: hWnd;
VAR Wnd : hWnd;
buff: ARRAY [0..127] OF Char;
begin
Result:=0;
Wnd := MainForm.Handle;
WHILE Wnd <> 0 DO
BEGIN
{


 
handra ©   (2002-07-10 11:09) [5]

Вот только параметры в виде строки с помощью SendMessage не передать, придется задуматься над использованием DDE.


 
tsarevep ©   (2002-07-10 12:56) [6]

Огромное спасибо!
Но поиск окна по Application.Title не подходит, так как он постоянно изменяется. Да и просто лежит компонента на форме которая не даёт второй запуск. Но у нее есть событие OnAlreadyExist в котором и можно передать ParamStr только не доходит как. Вот нужно как то засунуть в эту процедуру что то вроде.

if параметр then
не знаю чего
else
halt;// тоже не обязательно сама убьёт

Ну а DDE может и не плохо было бы только у меня 8 книжек и только в двух написано про то как связать свою прогу через DDE c Exсel, а зачем мне Excel. В остальных вобще этот протокол упущен.
C уважением.


 
I am   (2002-07-11 02:26) [7]

Я это делал через FileMapping. При запуске приложения оно проверяет наличие файла отображаемого в память. Если его нет значит оно его создает и пишет туда свой хэндл, а если есть, то считывает из него хэндл уже запущенного приложения и посылает ему свои параметры через WM_COPYDATA.

CreateFileMapping
MapViewOfFile


 
Юрий Зотов ©   (2002-07-11 02:32) [8]

Практически готовое решение (и даже не одно) см. здесь:
http://www.delphikingdom.com/helloworld/samples_win.htm


 
tsarevep ©   (2002-07-11 08:20) [9]

Приогромнейшее спасибо всем!
То Юрий Зотов © - Да не практически, а готовое, даже названия переменных с моими совпали и поэтому только {Copy - Paste).
Прогнал я ее по всем статьям. Единственная ошибка почему то если сделать Edit With MYPROGRAMM больше 34 файлов Windows говорит "Отказано в доступе указанному пути или файлу". Хотя редко у кого ума хватает сразу 35 файлов отправить в какую нибудь прогу, но все равно неприятно. Если вам не трудно напишите почему это происходит.
Особая вам благодарность.
С уважением.



Страницы: 1 вся ветка

Текущий архив: 2002.07.22;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.011 c
7-70941
Snake2000
2002-05-01 21:33
2002.07.22
Геймпад Sega Genesis и PC


1-70723
nitro313
2002-07-11 14:37
2002.07.22
Как присвоить к Caption строковое значение в одинарных кавычках?


3-70632
Loco
2002-06-30 14:34
2002.07.22
базы Foxpro


1-70740
Manulo
2002-07-09 15:18
2002.07.22
Работа с файлами...


14-70860
Chak
2002-06-23 21:15
2002.07.22
Иконка у компонента!