Запуск экземпляра
Вот начало моей фун.
int WINAPI WinMain (HINSTANCE hThisInst,HINSTANCE hPrevInst,
LPSTR lpszArgs,int nWinMode)
{
if (hPrevInst) return FALSE;
...
}
Правильно я делаю ?
А то оно все равно разрешает запускать больше одного приложения
Цитата:
Originally posted by alexora
Мне надо сделать, что бі можно только один раз запускать приложение
Вот начало моей фун.
int WINAPI WinMain (HINSTANCE hThisInst,HINSTANCE hPrevInst,
LPSTR lpszArgs,int nWinMode)
{
if (hPrevInst) return FALSE;
...
}
Правильно я делаю ?
А то оно все равно разрешает запускать больше одного приложения
Мне надо сделать, что бі можно только один раз запускать приложение
Вот начало моей фун.
int WINAPI WinMain (HINSTANCE hThisInst,HINSTANCE hPrevInst,
LPSTR lpszArgs,int nWinMode)
{
if (hPrevInst) return FALSE;
...
}
Правильно я делаю ?
А то оно все равно разрешает запускать больше одного приложения
Воспользуйся событиями.
OpenEvent - позволяет получить описатель именнованого объекта. Если ноль, то приложение не запущенно.
Тогда создаешь чере CreateEvent событие.
Соответственно при втором запуске, у тебя уже существует объект и ты получишь описатель... В этом случае делаешь возврат.
М я не могу вьехать никак почему
if (!hPredInstance) return FALSE не проходит
:)
Цитата:
Originally posted by alexora
А разве CreateEvent - единственный способ так сделать. Помню что где то встречал реализацию этого. Может есть еще какие то идеи ?
М я не могу вьехать никак почему
if (!hPredInstance) return FALSE не проходит
:)
А разве CreateEvent - единственный способ так сделать. Помню что где то встречал реализацию этого. Может есть еще какие то идеи ?
М я не могу вьехать никак почему
if (!hPredInstance) return FALSE не проходит
:)
CreateEvent не единственный способ... Так можно сделать через любой именнованый объект ядра.
Например через файл проецируемый в память...
if (!hPredInstance) return FALSE
что же касается этой строчки...
вот код:
char tmp[100];
int i=sprintf(tmp,"%p",hPrevInstance);
tmp[i+1]=0;
MessageBox(NULL,tmp,"Test",MB_OK);
Посмотри указатель, у меня он постоянно нулевой.
hPrevInstance
[in] Handle to the previous instance of the application. This parameter is always NULL.
If you need to detect whether another instance already exists, create a uniquely named mutex using the CreateMutex function. CreateMutex will succeed even if the mutex already exists, but the GetLastError function will return ERROR_ALREADY_EXISTS. This indicates that another instance of your application exists, because it created the mutex first.
Через FindWindow можно еще сделать - при запуске искать окно с твоим именем, правда не очень корректный способ, потому что имена могут совпадать.