PDA

Показать полную графическую версию : Как в Delphi узнать, есть процесс в памяти или нет?


[mzd]
09-09-2003, 15:41
Нужно сделать одноэкземплярное (блин, слово-то какое:) ) приложение. Окон у него нет, только иконка в трее, такчто поиск окна ничего не дает :(. В памяти запущен процесс с именем экзешника этой проги. Так вот, как в Delphi сделать проверку на наличие процесса в памяти?

CyberDaemon
09-09-2003, 16:08
Как вариант: копай в сторону CreateMutex. Пример куска кода, где прога проверяет наличие себя любимой в памяти могу запостить завтра.

[mzd]
09-09-2003, 16:41
CyberDaemon
Заранее спасибо

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

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



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.

Guest
13-09-2003, 13:34
лучше - проще и эффективнее

TEvent
или API - CreateEvent(..."Unique name")
и проверить код ошибки - см. SDK

[mzd]
15-09-2003, 12:46
CyberDaemon Биг спасиба!




© OSzone.net 2001-2012