giovedì 29 settembre 2011

Win32 C++: sapere se un'istanza del programma è già caricata

Breve esempio di una possibile soluzione al problema della ricerca di un'istanza del programma già attiva.
Il codice si basa sulla creazione di un semaforo ed il relativo check della sua esistenza al caricamento dell'applicazione. L'API Win32 in gioco è la CreateSemaphore.

Routine da chiamare nel main o nell' InitHistance della vostra applicazione:

bool AmIAlreadyActive()
{
TCHAR* szSemName = _T("MySemaphoreApp"); // utilizzare il nome che più aggrada
MyHandle=  CreateSemaphore(NULL, 0, 1, szSemName);

return (!MyHandle || (GetLastError() == ERROR_ALREADY_EXISTS)) ? true : false; 
}
MyHandle è una variabile di tipo HANDLE.
Ricordarsi di chiude l'handle al termine del programma mediante
CloseHandle(MyHandle);

Nessun commento:

Posta un commento

Mi raccomando, non costringermi a censurare il tuo commento, perciò sii educato!