检索程序是否启动,并将窗口显示

来源:互联网 发布:网络机顶盒用法 编辑:程序博客网 时间:2024/06/07 23:47

#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;
}
原创粉丝点击