Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для CyberDaemon

DOOMer


Сообщения: 3254
Благодарности: 438

Профиль | Отправить PM | Цитировать


Собственно идея такая - при старте пытаемся создать поименованный mutex. Имя уникальное, в данном случае - 'WAD Explorer already loaded!'. Если он создался - то значит проги в памяти ещё нет. Если выдал ошибку - программа в памяти уже болтается.

Кусок кода DPR-файла. C комментариями


[pre]
Var MutexHandle:THandle;

Function IsNextInstance:Boolean; //Проверяет, а не существуем ли мы...
Begin
*Result:=FALSE;
*MutexHandle:=CreateMutex( nil,False,'WAD Explorer already loaded!');
*If MutexHandle<>0
*Then If GetLastError=ERROR_ALREADY_EXISTS Then Result:=TRUE;
End;

begin
* *If IsNextInstance
* *then
* *Begin
* * * *//предыдущий экземпляр программы уже в памяти
* * * *//можно передать ей какое-нибудь сообщение
* * * *//......
* * * *//и закрыться
* * * *Closehandle(MutexHandle); //закрываем Handle
* * * *halt;
* * end;
* *//предыдущей версии программы в памяти нет - дальше
* *//стандартный код DPR-модуля
* *Application.Initialize;
* *Application.Title := 'WAD explorer';
* *Application.CreateForm(TMainWadExplorerForm, MainWadExplorerForm);
* *Application.Run;
 * //что у винды взяли - надо отдать - закрываем handle
* *//т.к это будет последний экземпляр handle, то и Mutex тоже закроется
* *Closehandle(MutexHandle);
end.
[/pre]

-------
"640 K ought to be enough for anybody" Bill Gates, 1981


Отправлено: 08:31, 10-09-2003 | #4