![]() |
Нужно сделать одноэкземплярное (блин, слово-то какое:) ) приложение. Окон у него нет, только иконка в трее, такчто поиск окна ничего не дает :(. В памяти запущен процесс с именем экзешника этой проги. Так вот, как в Delphi сделать проверку на наличие процесса в памяти?
|
Как вариант: копай в сторону CreateMutex. Пример куска кода, где прога проверяет наличие себя любимой в памяти могу запостить завтра.
|
CyberDaemon
Заранее спасибо |
Собственно идея такая - при старте пытаемся создать поименованный 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] |
лучше - проще и эффективнее
TEvent или API - CreateEvent(..."Unique name") и проверить код ошибки - см. SDK |
CyberDaemon Биг спасиба!
|
Время: 10:34. |
Время: 10:34.
© OSzone.net 2001-