首先是方法:
// 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;
本文介绍了一种通过互斥量检查来避免Windows程序重复启动的方法。通过使用CreateMutex函数创建互斥量,若该互斥量已存在,则表明程序已运行,此时可通过FindWindow函数定位到已存在的程序窗口并将其置为前台。
1174

被折叠的 条评论
为什么被折叠?



