現在我確定思路:首先創建一個互斥對象,如果創建成功(CreateMutex返回值不為NULL)並調用GetLastError函數返回ERROR_ALREADY_EXISTS常數,說明當前進程不是應用程序的第一個實例,結束程序的運行。
我們在VC中以一個沒有窗口,也不用MFC的Win32應用程序作例子。打開VC6,新建一個工程,類型選擇Win32 Application,工程名為:OnlyOne,單擊OK,選擇一個空的工程,完成。為工程添加一個新的C++源代碼文件,命名為:OnlyOne.c,並輸入如下代碼:
#include
int
WINAPI
WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd
)
{
char strAppName[] = "OnlyOne";
HANDLE hMutex = NULL;
//創建互斥對象
hMutex = CreateMutex(NULL, FALSE, strAppName);
if (hMutex != NULL)
{
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
MessageBox(NULL,TEXT("不是第一次運行這個程序。"),TEXT("OnlyOne"),MB_OK | MB_ICONINFORMATION);
//關閉互斥對象,退出程序
CloseHandle(hMutex);
return (-1);
} else
{
MessageBox(NULL,TEXT("第一次運行這個程序。"),TEXT("OnlyOne"),MB_OK | MB_ICONINFORMATION);
}
} else
{
MessageBox(NULL,TEXT("創建互斥對象失敗。"),TEXT("OnlyOne"),MB_OK | MB_ICONINFORMATION);
}
//關閉互斥對象
CloseHandle(hMutex);
return (-1);