//Функция, проверяющая, запущено ли приложение
// ПАРАМЕТРЫ:
// AppName - имя приложения
// ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
// -- 0 - Ok (приложение не запущено)
// -- 1 - Ошибка выделения памяти
// -- 2 - Приложение запущено
int CanStartApplication(char* AppName)
{
HANDLE hUniqueMapping;
hUniqueMapping = CreateFileMapping( (HANDLE)0xFFFFFFFF,
NULL,
PAGE_READONLY,
0,
32,
AppName);
if ( !hUniqueMapping )
return 1;
else
if ( GetLastError() == ERROR_ALREADY_EXISTS )
return 2;
return 0;
}
Как не допустить запуска второй копии программы.
Подскажите пожалуйста, я думаю задачка не сложная
Например, так:
Спасибо! Всё работает.
http://cbuilder.ru/index.php?action=forum
мне подсказали:
Вот здесь:
мне подсказали:
Цитата:
А если у пользователя отключен файл подкачки, то прогу запустить не удастся.
Есть ещё вариант как не допустить запуска второй копии программы?
Код:
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR , int)
{
try
{
// Пытаемся открыть мьютекс.
char *c = AnsiLastChar(ExtractFileName(Application->ExeName));
HANDLE hMutex = OpenMutex(MUTEX_ALL_ACCESS, 0, c);
if(!hMutex)
{
hMutex = CreateMutex(0, 0, c);
}
else
{
ShowMessage("Приложение уже запущенно.");
return 0;
}
Application->Initialize();
Application->CreateForm(__classid(TMain), &Main);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0;
}
{
try
{
// Пытаемся открыть мьютекс.
char *c = AnsiLastChar(ExtractFileName(Application->ExeName));
HANDLE hMutex = OpenMutex(MUTEX_ALL_ACCESS, 0, c);
if(!hMutex)
{
hMutex = CreateMutex(0, 0, c);
}
else
{
ShowMessage("Приложение уже запущенно.");
return 0;
}
Application->Initialize();
Application->CreateForm(__classid(TMain), &Main);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0;
}
Можно еще FindWindow попробовать
Можно ещё и GlobalFindAtom, но мне больше нравится Mutex.
Mutex работает безотказно, ваще =) сам пользую. +1