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

Вниз

Запуск второй копии программы   Найти похожие ветки 

 
DiMonstr   (2006-03-08 02:01) [0]

Есть прога, которая использует MDI-формы.
Так, вот. При запуске второй копии проги фокус становится на предыдущую копию, а вторая копия не запускается. Это я сделал. Но, вот если прога запускается с параметрами (в часности путь к файлу в параметре), то надо от второй копии передать в первую все параметры. Как это сделать?

Заранее спасибо за ответы


 
Германн ©   (2006-03-08 02:14) [1]


> DiMonstr   (08.03.06 02:01)  
>
> Есть прога, которая использует MDI-формы.
Что за "прога"?
Твоя или чужая?

> Так, вот. При запуске второй копии проги фокус становится
> на предыдущую копию, а вторая копия не запускается. Это
> я сделал.
Как и что сделал?

> Но, вот если прога запускается с параметрами (в
> часности путь к файлу в параметре), то надо от второй копии
> передать в первую все параметры. Как это сделать?


Ответь сначала на вопросы. Поскольку общего решения не существует.


 
DiMonstr   (2006-03-08 02:25) [2]

Значит так, отвечаю:

1.Прога полностью написанная мною от и до.

2.Сделал это я с помощью мьютексов следующим образом (PROJECT.DPR) :

{$R *.res}
var
Wnd : hWnd;
clss,buff,mainS: array [0..255] of Char;
hMutex : integer;
hnd: LongInt;
begin
 //  Предотвращение повторного запуска
 StrCopy(mainS,"TITLE");
 SetWindowText(Application.Handle,mainS);
 hMutex:=CreateMutex(nil,TRUE,"BelAZNavigator");       // Создаем семафор
 if GetLastError <> 0 then                             // Ошибка создания - значит уже создан
 begin
  GetClassName(Application.Handle, clss,sizeof(clss)); // Получаем имя класса
  Wnd := GetWindow(Application.Handle, gw_HWndFirst);  // Получаем ссылу на окно
  while Wnd <> 0 do
  begin
   if (Wnd<>Application.Handle)and(GetWindow(Wnd, gw_Owner)=0) then // Поиск по всем окнам
   begin
    GetClassName(Wnd,buff, sizeof(buff));    // Получаем класс окна
    if StrComp(buff,clss)=0 then             // Сравниваем с нашим классом
    begin
     GetWindowText(Wnd, buff, sizeof(buff)); // Полечаем текст найденного окна
     if StrComp(buff,mainS)=0 then           // Сравниваем с нашим окно
     begin
      SendMessage(Wnd,WM_SETFOCUS,Wnd,0);
      ShowWindow(Wnd,SW_SHOWNORMAL);
     end;
    end;
   end;
   Wnd := GetWindow(Wnd, gw_hWndNext); // Берем следующее
  end;
   exit; // выход из программы не создавая формы и не запуская приложение
 end;

 try
   Application.Initialize;
   Application.Title := "TITLE";
   Application.CreateForm(TMainForm, MainForm);
   Application.Run;
   ReleaseMutex(hMutex)
end.


3.Передача параметров в прогу делается обычным способом:

procedure TMainForm.FormShow(Sender: TObject);
begin
 If ParamCount > 0 then GeneralOpenFile(False, ParamStr(1));
end;


Вот так всё и происходит!


 
Германн ©   (2006-03-08 02:37) [3]

2 DiMonstr   (08.03.06 02:25) [2]
Тогда нужно ввести и ещё один вариант передачи параметров программе, кроме командной строки. Ведь окно программы ты находишь, если оно есть. Так и передай ему сообщение с параметрами, который файл нужно открыть.


 
DiMonstr   (2006-03-08 12:01) [4]

И как интересно это будет выглядеть?


 
Германн ©   (2006-03-09 01:26) [5]


> DiMonstr   (08.03.06 12:01) [4]
>
> И как интересно это будет выглядеть?

Ну, например SendMessage WM_CopyData, в котором передавать командную строку.



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

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

Наверх




Память: 0.48 MB
Время: 0.037 c
2-1143372233
Tirael
2006-03-26 15:23
2006.04.09
как писать плагины для оперы


2-1143030719
Khim
2006-03-22 15:31
2006.04.09
Messagebox


2-1143168361
kast
2006-03-24 05:46
2006.04.09
WebBrowser - проблема


15-1142443871
Silica
2006-03-15 20:31
2006.04.09
C++


15-1142790487
Суслик
2006-03-19 20:48
2006.04.09
Прокси