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

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.038 c
14-1117347749
NikNet
2005-05-29 10:22
2005.06.29
Делаю Joiner вот проблемма вытащить код из программы


4-1115384854
webpauk
2005-05-06 17:07
2005.06.29
Изменение имени программы


14-1117181522
TUser
2005-05-27 12:12
2005.06.29
Уплотнение элементов в памяти


3-1116225853
Fynjy1984
2005-05-16 10:44
2005.06.29
Нередактируемый запрос


1-1118210108
УпырЬ
2005-06-08 09:55
2005.06.29
Не закрывающияся программа





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский