首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

激活窗口失灵

2012-09-07 
激活窗口失效我要实现的功能就是要保证程序启动唯一,当第二次启动的时候检测到程序已经运行了则激活已经运

激活窗口失效
我要实现的功能就是要保证程序启动唯一,当第二次启动的时候检测到程序已经运行了则激活已经运行的程序窗口。目前程序窗口老是不能激活,郁闷。
程序代码如下:在程序初始化函数 InitInstance中
HANDLE hMutex=CreateMutex(NULL, FALSE, "hMutex");
if(GetLastError()==ERROR_ALREADY_EXISTS) 
{
  CloseHandle(hMutex);
  HWND hWndPrev=::GetWindow(::GetDesktopWindow(),GW_CHILD);//获取子窗口。
  while(::IsWindow(hWndPrev))
{
if(::GetProp(hWndPrev,"test"))//如有test属性,则将它激活。需要::SetProp(m_hWnd,"test",(HANDLE)1)
{
//如果主窗口已最小化,则恢复其大小。
if (::IsIconic(hWndPrev))
::ShowWindow(hWndPrev,SW_RESTORE);

::SetForegroundWindow(hWndPrev);//激活应用程序的主窗口
return FALSE; //退出
}

hWndPrev = ::GetWindow(hWndPrev,GW_HWNDNEXT);//继续寻找下一个窗口。
}
  AfxMessageBox("已有一个实例在运行,但找不到它的主窗口!",MB_OK|MB_ICONINFORMATION,NULL);
  return FALSE; //退出
}


[解决办法]
//如果主窗口已最小化,则恢复其大小。
if (::IsIconic(hWndPrev))
::ShowWindow(hWndPrev,SW_RESTORE);

::SetForegroundWindow(hWndPrev);//激活应用程序的主窗口
return FALSE; //退出
}

你已加注释了,如果主窗口最小化则恢复其大小,那么窗口不是最小化时你却没处理,再加个不是最小化时的处理
[解决办法]
实在不行的话换一下 HANDLE hMutex = CreateSemaphore(NULL, 1, 1, _T("hMutex")); 
建议"hMutex"用一个CLSID 128位来命名,因为那样可以避免有时候名字冲突。
[解决办法]
http://www.cnblogs.com/abiao/articles/388436.html
看下这个。
[解决办法]
::SetForegroundWindow(hWndPrev);//激活应用程序的主窗口
这句下面再加个SetFocus函数,就是获得焦点的函数
[解决办法]
我试过的,showwindow.sw_show.之后再调用那两函数。

热点排行