#define APP_PROP_NAME _T("MyApp")
#define APP_PROP_HANDLE ((HANDLE)1)
在窗口创建时添加
SetProp(m_hWnd, APP_PROP_NAME, APP_PROP_HANDLE);
在程序启动时调用 AppInstanceExist()
BOOL CALLBACK EnumWndProc(HWND hwnd,LPARAM lParam)
{
//APP_PROP_NAME窗口关联的名字
HANDLE h = GetProp(hwnd, APP_PROP_NAME);
if( h == APP_PROP_HANDLE)
{
*(HWND *)lParam = hwnd;
return FALSE;
}
return TRUE;
}
HWND CAppApp::AppInstanceExist()
{
HWND oldHWnd = NULL;
//枚举所有运行的窗口
EnumWindows(EnumWndProc,(LPARAM)&oldHWnd);
if(oldHWnd != NULL)
{
//判断窗口是否最小化
if(::IsIconic(oldHWnd))
{
//激活找到的前一个程序
::ShowWindow(oldHWnd,SW_SHOWNORMAL);
}
else
{
::ShowWindow(oldHWnd,SW_SHOWNA);
}
//把它设为前景窗口
::SetForegroundWindow(oldHWnd);
::SetWindowPos(oldHWnd,HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
::SetWindowPos(oldHWnd,HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
}
return oldHWnd;
}