使已存在的实例自动弹出问题?

中才德创 2009-07-22 08:17:11
	// 只生成一个实例,当已有实例存在,使其自动弹出。
#define STR_PROGRAM_NAME L"MagicBackup"

HANDLE hMutex = ::CreateMutex(NULL, TRUE, STR_PROGRAM_NAME);
if (NULL != hMutex)
{
DWORD dwErr = ::GetLastError();
if (ERROR_ALREADY_EXISTS == dwErr)
{
::CloseHandle(hMutex);
HWND hWndPrevious = ::GetWindow(GetDesktopWindow(), GW_CHILD);
while (hWndPrevious)
{
if (::GetProp(hWndPrevious, STR_PROGRAM_NAME))
{
// 问题一:
// 为什么这儿,GetProp函数调用之后,始终进不了?
if (!::IsWindowVisible(hWndPrevious))
{
::ShowWindow(hWndPrevious, SW_RESTORE);
}

::SendMessage(hWndPrevious, WM_SYSCOMMAND, SC_RESTORE, NULL);
::SetForegroundWindow(hWndPrevious);
::SetForegroundWindow(::GetLastActivePopup(hWndPrevious));
}
hWndPrevious = ::GetWindow(hWndPrevious, GW_HWNDNEXT);
}

return FALSE;
}
}
...全文
35 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wltg2001 2009-07-23
  • 打赏
  • 举报
回复
除了用FindWindow来处理外,常用的方法还有一种:可以通过群发自定义消息来处理。
中才德创 2009-07-23
  • 打赏
  • 举报
回复
up
oyljerry 2009-07-22
  • 打赏
  • 举报
回复
直接用FindWindow查找对应的窗口,然后再激活当前窗口显示

15,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧