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

Вниз

Как определить работает ли уже данное приложение или это его перв   Найти похожие ветки 

 
rolex   (2005-05-02 20:23) [0]

А если работает, то сделать его активным.
Все делаю таким способом:

procedure TForm1.FormCreate(Sender: TObject);
var Wnd:hWnd; buff:array[0..127] of Char;
begin
 Wnd:=GetWindow(Handle, gw_HWndFirst);
 while Wnd<>0 do begin
   if (Wnd<>Application.Handle) and (GetWindow(Wnd, gw_Owner)=0) then
   begin
     GetWindowText(Wnd, buff, sizeof (buff ));
     if StrPas(buff)=Application.Title then
     begin SetForegroundWindow(wnd); Halt; end;
   end;
   Wnd:=GetWindow(Wnd, gw_hWndNext);
 end;
end;

Все работает прекрасно, но только вот если прога имеет Title как и название открытой папки, то она не запускается!
Помогите плиз!!!


 
Antonn ©   (2005-05-02 20:29) [1]

Можно ставить семафоры. CreateMutex, ReleaseMutex


 
Gero ©   (2005-05-02 20:29) [2]

Это плохой способ.
Используй CreateMutex.


 
rolex   (2005-05-02 20:40) [3]

А можно кодом, а то я с этими работать вообще не умею.


 
begin...end ©   (2005-05-02 20:46) [4]

> rolex   (02.05.05 20:40) [3]

См. ФАК на этом сайте.


 
ANB ©   (2005-05-03 10:03) [5]

Замени GetWindow на FindWindow и придумай класс первой формы подлиннее и поуникальнее.


 
Axis_of_Evil ©   (2005-05-03 10:18) [6]

GlobalAddAtom.


 
Marser ©   (2005-05-03 11:37) [7]


> Antonn ©   (02.05.05 20:29) [1] [Новое
>сообщение][Ответить]
> Можно ставить семафоры. CreateMutex, ReleaseMutex

Семафор это не мьютекс.


 
rolex   (2005-05-03 13:22) [8]

Теперь делаю так:
procedure TForm1.FormCreate(Sender: TObject);
var Mutex:THandle;
begin
 Mutex:=CreateMutex(nil, False, "MyMutex");
 if (Mutex=0) or (GetLastError = ERROR_ALREADY_EXISTS) then begin
 SetForegroundWindow(???); ShowWindow(???,SW_RESTORE); halt; end;
end;

Но только что теперь надо поставить вместо "???", чтобы предыдущая копия программы показалась?


 
ANB ©   (2005-05-03 13:32) [9]

См.
> ANB ©   (03.05.05 10:03) [5]
или юзай MMF. Еще есть способ : регистришь 2 своих сообщения с именем похитрее и опрашиваешь всех. Если кто ответит (тут нужно хендл передать) - значит приложение запущено и хендл как раз подоспел. С мутексами оно как то . . . Маловато информации для твоих целей. А основа одна - уникальность имени. Тебе либо имя мутекса надо делать уникальным, либо класс окна, либо сообщение. Имхо, с классом окна проще всего.


 
}{enon ©   (2005-05-03 20:46) [10]

А чем вам не нравится способ из FAQ?
http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=988619824&n=15


 
Eraser ©   (2005-05-04 00:03) [11]

В dpr файле твоего проекта перед
Application.Initialize;
впиши
 
   CreateMutex(nil, True, "MyProject");
   if GetLastError = ERROR_ALREADY_EXISTS then
   begin
    // не обязательно MessageBox(0, PChar("Already EXISTS!"), PChar("Super proga"), MB_ICONERROR);
     Halt;
   end;


но если хочешь, чтобы автоматически активировлось старое приложение добавь регистрацию пользовательского сообщения и отвправляй его броадкастом перед вызовом halt. Само сабой это приложение должно обрабатывать это сообщение...


 
Eraser ©   (2005-05-04 00:09) [12]

ANB ©
Тебе либо имя мутекса надо делать уникальным, либо класс окна, либо сообщение. Имхо, с классом окна проще всего.


Как раз наоборот, класс окна является идентификатором, которым ты пользуешься при написании программы довольно часто, особенно если это главная форма... согласись, уникальный идентификатор типа F21619DB_D6B8_4C7E_87FA_DCA184E672AD не очень удобно использовать как название класса... а вот как название именованного мьютекса- лекго- нет ничего проще, чем объявить константу
MyUniqID = "F21619DB_D6B8_4C7E_87FA_DCA184E672AD";
и пользуйся!


 
ANB ©   (2005-05-04 09:49) [13]


> Eraser ©   (04.05.05 00:09) [12]
- но у него все равно вылезет проблема поиска своего окна. Хотя, если броадкаст + свое сообщение тоже решит проблему. Хе, я обычно все главные формы во всех проектах TfmMain делаю.



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

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

Наверх




Память: 0.49 MB
Время: 0.028 c
1-1118181493
Green_Templar
2005-06-08 01:58
2005.06.29
свой тип файлов


14-1117821779
sofs
2005-06-03 22:02
2005.06.29
прошу прощения!


1-1118130236
makle
2005-06-07 11:43
2005.06.29
TreeView. Количество вложенных уровней у нода


14-1117747082
Просто Джо
2005-06-03 01:18
2005.06.29
Горан Брегович - всякие корни и пни маздай


4-1115098290
ronyn
2005-05-03 09:31
2005.06.29
Научите, плиз, как работать с WinAPI на примере.