| Содержание | Последнее обновление: 14.02.2004 | |
|
Как не допустить второго запуска программы? Автор: OlegGG В начале программы (ИМХО, лучше всего до "Application->Initialize();") пишем: hMutex = CreateMutex(NULL,true,"some_big_big_unique_mutex_name");
if (GetLastError()==ERROR_ALREADY_EXISTS)
{
// мы уже есть - ругаемся и выходим
ShowMessage("proga already loaded");
Application->Terminate();
}
В конце пишем:ReleaseMutex(hMutex); // это обязательно, а то до перезагрузки прога второй раз не запуститсяВариант #2 - Атомы: В принципе, аналогичный предыдущему вариант. В начале программы (ИМХО, лучше всего до "Application->Initialize();") пишем: AnsiString AtomName = "some_big_big_unique_atom_name";
ATOM Atom;
if (GlobalFindAtom(AtomName.c_str()) == 0)
{
// создаём атом
Atom = GlobalAddAtom(AtomName);
}
else
{
// мы уже есть - ругаемся и выходим
ShowMessage("proga already loaded");
Application->Terminate();
}
В конце пишем:GlobalDeleteAtom(Atom); // это обязательно, ато до перезагрузки прога второй раз не запуститсяВариант #3 - FindWindow: Для этого метода необходимо, чтобы главное окно вашей программы имело уникальное имя класса или заголовок. Например, имя класса главной формы - "Tformochka". Тогда в начале программы (ИМХО, лучше всего до "Application->Initialize();") пишем: HWND hWnd = FindWindow("Tformochka",NULL); // ищем своё окно
if (hWnd!=NULL) // если нашли
{
ShowMessage("proga already loaded"); // ругаемся
SetForegroundWindow(hWnd); // активизируем предыдущую копию проги
Application->Terminate(); // закрываемся
}
|