若要应用程序只允许运行一个实例,只需要在 main 或 WinMain 函数中调用 Create* 函数,以便创建一个命名对象(创建的是什么对象则是无所谓的)。当 Create* 函数返回时,调用 GetLastError 函数。如果 GetLastError 函数返回 ERROR_ALREADY_EXISTS,那么你的应用程序的另一个实例正在运行,新实例可以退出。
下面是说明这种情况的部分代码:
1: int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR pszCmdLine, int nCmdShow) {
2: HANDLE handle = CreateMutex(NULL, FALSE, "one instance");
3: if(GetLastError() == ERROR_ALREADY_EXISTS) {
4: // There is already an instance of this application running.
5: return 0;
6: }
7: ...
8: return 0;
9: }