Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.04.09;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.014 c
2-1143205376
san_pancho
2006-03-24 16:02
2006.04.09
Кодировка


1-1141567051
X9
2006-03-05 16:57
2006.04.09
Узнать доступность MSXML


15-1142496449
SAS1024
2006-03-16 11:07
2006.04.09
Нужны 2 компонента. Заплачу :)


4-1138106786
er_long76
2006-01-24 15:46
2006.04.09
Плагины для Windows Messenger


4-1137728229
alex_pv2
2006-01-20 06:37
2006.04.09
Как сказать приложению "Сохранись"





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский