原理:程序通过CreateMutex函数来创建一个互斥量,如果GetLastError不等于ERROR_ALREADY_EXISTS,
即:如果本程序的实例还没有运行,那么就正常启动程序;反之说明本程序已经有一个实例在运行,那么就
弹出一个对话框提示用户。
实现:
1、在应用程序类中声明一个全局变量:
HANDLE m_hOneInstance;
2、在应用程序类的 InitInstance()函数中创建对话框之前添加如下代码:
- m_hOneInstance=::CreateMutex(NULL,FALSE,"Test");
- if (GetLastError()==ERROR_ALREADY_EXISTS)
- {
- AfxMessageBox("本程序只能同时运行一个!");
- return false;
- }
3、给应用程序类添加消息函数 ExitInstance(),以释放互斥量。
- int CTtApp::ExitInstance()
- {
- CloseHandle(m_hOneInstance);
- return CWinApp::ExitInstance();
- }