![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Опять про второй экземпляр приложения... [D6, Win95/98, Win2k, WinXP]
RDen © (2004-12-01 10:55:00)Здравствуйте! Не допускаю запуска второго экзэмпляра своего приложения так:
в .DPR
....
if FindWindow('TForm1','Данные по численности населения') <> 0 then
begin
SetForegroundWindow(FindWindow('TForm1','Данные по численности населения'));
Application.Terminate;
Exit;
end;
....
но в ходе работы, меняется Caption у формы, и тогда запуск второго экзэмпляра становится возможным. Как этого избежать?
Спасибо.
RDen (2004-12-01 12:33:00) [1]Огромное спасибо, очень помогли!
Думкин (2004-12-01 12:24:00) [2]> [4] Alexander Panov © (01.12.04 11:36)
Мала - не мала. Тебе GUID-ов жалко? :)
Нажать Ctrl-Shift-G - гораздо проще и быстрее.
Alexander Panov (2004-12-01 11:36:00) [3]Думкин © (01.12.04 11:18) [3]
aUniqueString - GUID юзать. :(
Зачем?
Весьма мала вероятность того, например, что уникальную строку, если ее задать в виде UniqueStr := Application.Title+IntToStr(Application.FormMain.Handle),
какое-то приложение будет использовать.
Думкин (2004-12-01 11:18:00) [4]aUniqueString - GUID юзать. :(
TUser (2004-12-01 11:01:00) [5]
> Как этого избежать?
Использовать мьютексы, например. Через FW тоже можно чего-нибудь придумать - например, при изменении Caption'а писать его в реестре где-нибудь. Тогда будешь искать окошко с правильным заголовком. Еще можно посоветовать изменить класс на TMainaUnikalnaGlavnaForma1 - это спасет.
Alexander Panov (2004-12-01 11:00:00) [6]Использовать мьютексы.
ответы есть в 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;