首先是方法:
// IsAlreadyRunning - 是否已經運行
BOOL IsAlreadyRunning()
{
BOOL bRet = FALSE;
HANDLE hMutex = ::CreateMutex(NULL, TRUE, _szAppName);
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
bRet = TRUE;
HWND hWnd = FindWindow(_szAppName, _szTitle);
SetForegroundWindow(hWnd);
}
if (hMutex)
{
::ReleaseMutex(hMutex);
}
return bRet;
}
然後在程序開始處調用:
// WinMain - 程序進入點
int CALLBACK WinMain(HINSTANCE hInstance, //應用程序實例句柄
HINSTANCE hPrevInstance, //16位系統中,該值指向當前程序的前一個實例,Win32 系統中,hPrevInstance總是為NULL
LPSTR lpCmdLine, //指向應用程序命令行的字符串的指針,不包括執行文件名
int nCmdShow) //指明窗口如何顯示
{
if (IsAlreadyRunning()) return 0;