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

Вниз

Опять про второй экземпляр приложения...   Найти похожие ветки 

 
RDen   (2004-12-01 10:55) [0]

Здравствуйте! Не допускаю запуска второго экзэмпляра своего приложения так:
в .DPR
....
if FindWindow("TForm1","Данные по численности населения") <> 0 then
   begin
     SetForegroundWindow(FindWindow("TForm1","Данные по численности населения"));
     Application.Terminate;
     Exit;
   end;
....

но в ходе работы, меняется Caption у формы, и тогда запуск второго экзэмпляра становится возможным. Как этого избежать?
Спасибо.


 
Alexander Panov ©   (2004-12-01 11:00) [1]

Использовать мьютексы.
ответы есть в FAQ, полно в интернете.

Вот пример подобной функции:

function isRunning(aUniqueString:String): Boolean;
var
 hMutex: THandle;
begin
  Result := False;
  hMutex := CreateMutex(nil,False,PChar(aUniqueString));
  if GetLastError = ERROR_ALREADY_EXISTS then
  begin
    Result := True;
    CloseHandle(hMutex);
  end;
end;


 
TUser ©   (2004-12-01 11:01) [2]


> Как этого избежать?

Использовать мьютексы, например. Через FW тоже можно чего-нибудь придумать - например, при изменении Caption"а писать его в реестре где-нибудь. Тогда будешь искать окошко с правильным заголовком. Еще можно посоветовать изменить класс на TMainaUnikalnaGlavnaForma1 - это спасет.


 
Думкин ©   (2004-12-01 11:18) [3]

aUniqueString - GUID юзать. :(


 
Alexander Panov ©   (2004-12-01 11:36) [4]

Думкин ©   (01.12.04 11:18) [3]
aUniqueString - GUID юзать. :(


Зачем?
Весьма мала вероятность того, например, что уникальную строку, если ее задать в виде UniqueStr := Application.Title+IntToStr(Application.FormMain.Handle),
какое-то приложение будет использовать.


 
Думкин ©   (2004-12-01 12:24) [5]

> [4] Alexander Panov ©   (01.12.04 11:36)

Мала - не мала. Тебе GUID-ов жалко? :)
Нажать Ctrl-Shift-G - гораздо проще и быстрее.


 
RDen   (2004-12-01 12:33) [6]

Огромное спасибо, очень помогли!



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

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

Наверх




Память: 0.47 MB
Время: 0.052 c
4-1098938185
carmen
2004-10-28 08:36
2004.12.12
Как изменить значение TEdit в чужой программе и нажать кнопку в


6-1096646286
BKGG
2004-10-01 19:58
2004.12.12
Sockets


3-1100246373
a_tereshin
2004-11-12 10:59
2004.12.12
Как получить список доступных алиасов


1-1101295236
ssk
2004-11-24 14:20
2004.12.12
MDI Child в роли досовой консоли


1-1101484613
GOgo
2004-11-26 18:56
2004.12.12
Заставка