Статистика | Зарегистрировано на сайте: Всего: 51635
Онлайн всего: 7 Гостей: 7 Пользователей: 0
|
|
Каталог статей
Как не допустить запуск второй копии программы X
FindWindow является неполным решением (если меняется заголовок окна или если есть другая программа с таким же заголовком или типом окна).
Вторично: Это работает медленно.
Правильно - использовать обьекты синхронизации Win32 API.
Лениво пользовать семафоры, покажу на именованных мутексах (семафоры с двумя состояниями).
Unit OneInstance32;
interface
implementation
uses Forms;
var g_hAppMutex: THandle;
function OneInstance: boolean; var g_hAppCritSecMutex: THandle; dw: Longint; begin g_hAppCritSecMutex := CreateMutex( nil, true, PChar(Application.Title + '.OneInstance32.CriticalSection') );
// if GetLastError - лениво писать
g_hAppMutex := CreateMutex( nil, false, PChar(Application.Title + 'OneInstance32.Default') );
dw := WaitForSingleObject( g_hAppMutex, 0 );
Result := (dw <> WAIT_TIMEOUT);
ReleaseMutex( g_hAppCritSecMutex ); // необязательно вследствие последующего закрытия CloseHandle( g_hAppCritSecMutex );
end;
initialization
g_hAppMutex := 0;
finalization
if LongBool( g_hAppMutex ) then begin ReleaseMutex( g_hAppMutex); // необязательно CloseHandle( g_hAppMutex ); end;
end.
|
Категория: API | Добавил: Lerka (22 Ноя 2012)
|
Просмотров: 457
| Рейтинг: 1.0/
5
Оштрафовать
| Жаловаться на материал |
|
|