![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как избежать повторного запуска exe-файла? [D3, NT4]
KVBr © (2002-10-16 15:39:00)Как избежать повторного запуска exe-файла, если титл окна может динаммически меняться во время работы с приложением?
Zemal (2002-10-16 17:26:00) [1]>>KVBr
Да незачто :). В общем-то я уже пару раз такое выкладывал в этот форум... можно было в архивы глянуть... там и других подобных вариантов полно было :). Это в общем-то довольно распространённый вопрос :).
KVBr (2002-10-16 17:23:00) [2]Zemal, спасибо, все Ok!
Zemal (2002-10-16 17:13:00) [3]Хендл окна независит от титла.
Zemal (2002-10-16 17:10:00) [4]Кстати!
>>В FAQ разобраны примеры для обработки приложения, зная его хендл. В моем случае хендл окна меняется. Как быть?
Как такое может быть? Хендл окна это совсем не его "титл", а идентификатор и меняться он неможет!
Zemal (2002-10-16 17:05:00) [5]>>KVBr
Ну что? Подходит тебе мой вариант с созданием пустого Map-файла в памяти?
P.S. При закрытии твоего приложения этот "мар" будет удалён автоматом. Попробуй. У меня работает без сбоев.
Zemal (2002-10-16 16:54:00) [6]Ну так я же тебе написал... создавай Map-файл в памяти. Вторая копия приложения будет пытаться создать точно такой же, но наткнётся на такой же и несможет, а потому закроется до инициализации... что тут непонятного?! Всё довольно просто.
KVBr (2002-10-16 16:44:00) [7]Может я некорректно сформулировал вопрос. Я имел в виду динамически меняющийся хендл внешнего приложения (например,Lotus Notes) запускаемого exe моего приложения.
Внук (2002-10-16 16:12:00) [8]И вдруг БАЦ - вторая смена :)))
Вячеслав (2002-10-16 16:10:00) [9]Это типа работает себе, работае, и вдруг БАЦ! хендл поменялся.
FAQ 2 раза :)
Внук (2002-10-16 16:09:00) [10]В данном случае самый простой способ (и, как и любой другой способ борьбы с копиями - не идеальный) - это создание именованного мьютекса, imho.
Alx2 (2002-10-16 16:07:00) [11]Создай именованный объект ядра. Например, mutex. В проге проверяй его существование. Если он есть, значит запущен экз. уже. Опять таки см. в FAQ
Zemal (2002-10-16 16:06:00) [12]Я делаю так:
program Project1;
uses
Forms,
Windows,
Dialogs,
uMain in "uMain.pas" {fMain};
{$R *.res}
var
UniqueMapping: THandle;
begin
UniqueMapping := CreateFileMapping($ffffffff,
nil, PAGE_READONLY, 0, 32, "MyMap");
if UniqueMapping = 0 then
begin
ShowMessage("Ошибка выделения памяти!");
Halt;
end else
if GetLastError = ERROR_ALREADY_EXISTS then
begin
ShowMessage("Вторую копию приложения запускать нельзя!");
Halt;
end;
Application.Initialize;
Application.CreateForm(TfMain, fMain);
Application.Run;
end.
Такой код в файле проекта будет тебе гарантией, что две копии твоей программы незапустит никто :). Пользуй на здоровье! :)
KVBr (2002-10-16 16:04:00) [13]В FAQ разобраны примеры для обработки приложения, зная его хендл. В моем случае хендл окна меняется. Как быть?
Romkin (2002-10-16 15:42:00) [14]FAQ