Форум: "Основная";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];
ВнизОпять про второй экземпляр приложения... Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.05 c