問題描述: 我們開發過程中可能會經常遇到,只啟動一個程序實例。即一個程序啟動之后,如果再次執行該程序,將會恢復之前打開的程序,而不是打開一個新的程序。
實現原理:利用FindWindow/FindWindowEx查找指定窗口的句柄,如果找到,則當前程序已經執行,只需重新顯示到最前面即可;如果沒有找到,表示程序沒有運行, 繼續執行程序初始化。
程序示例:
BOOL SingletonInstance() { HWND hPreWnd; if ( hPreWnd = ::FindWindow(NULL, APP_NAME) ) { if ( IsIconic(hPreWnd) ) // IsIconic: Is Minisized? IsZoomed: Is Maxisized? { ::ShowWindow( hPreWnd, SW_SHOWNORMAL ); SetForegroundWindow(hPreWnd); } else { ::ShowWindow( hPreWnd, SW_RESTORE ); SetForegroundWindow(hPreWnd); } return TRUE; } return FALSE; }