MFC 如何检测进程已启动

来源:百度知道 编辑:UC知道 时间:2024/05/04 17:21:29
我写了一个多文档程序,希望可以只打开一个实例,采用了FindWindow();来解决,但是当打开一个文档时,窗口的名字就变成了MyTest-NewWindow
这样就没有办法检测了。高人帮帮忙。
能不能获得当前执行的进程,并将其最大化呀。
三楼的老大,这个不管用呀,我看了半天代码,也搞不明白,而且启动程序后,最小化,然后再启动这个程序,已经启动的依然是最小化,没有反应。只是不能打开第二个实例而已。

"CApp.cpp"文件的InitInstance函数开头加入以下代码:

// 获得当前要启动程序的句柄
HANDLE hSem = CreateSemaphore(NULL, 1, 1, m_pszExeName);

if(GetLastError() == ERROR_ALREADY_EXISTS) // 程序已启动
{
CloseHandle(hSem); // 关闭当前要启动的程序
HWND hWndPrevious = ::GetWindow(::GetDesktopWindow(), GW_CHILD);
while (::IsWindow(hWndPrevious))
{
if (::GetProp(hWndPrevious, m_pszExeName))
{
if (::IsIconic(hWndPrevious))
////////////////////////////////////////////
////////////////////////////////////////////
::ShowWindow(hWndPrevious, SW_SHOWMAXIMIZED);
////////////////////////////////////////////
////////////////////////////////////////////

::SetForegroundWindow(hWndPrevious);

::SetForegroundWindow(::GetLastActivePopup(hWndPrevious));

return FALSE;
}
hWndPrevious = ::GetWindow(hWndPrevious, GW_HWNDNEXT);
}
return false;
}