Главная страница
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.027 c
3-1139929240
Ольга
2006-02-14 18:00
2006.04.09
Построение иерархии зависимостей объектов БД


15-1142582154
Vlad Oshin
2006-03-17 10:55
2006.04.09
Можно ли в HP 6L 5L 1100 1200 печатать на рулонной бумаге?


8-1130508541
Василий
2005-10-28 18:09
2006.04.09
Левый и правый динамик


15-1142624192
TStas
2006-03-17 22:36
2006.04.09
КАк изменить свои детали


3-1139562513
Bless
2006-02-10 12:08
2006.04.09
shared-бликировки и read commited