只运行1个实例判断,任务管理器没有,程序却提示存在???

ac_de ac_de 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

我用信号量和窗口增加标记拌饭 来判断是否 已经运行了1个实例,
bool CTest1::IfProgramExited()
{

HANDLE hSem = CreateSemaphore(NULL, 1, 1,"ProgramA");
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
CloseHandle(hSem);
HWND hWndPrevious = ::GetWindow(::GetDesktopWindow(),
GW_CHILD);
while (::IsWindow(hWndPrevious))
{
if (::GetProp(hWndPrevious, “test"))
{
if (::IsIconic(hWndPrevious))
::ShowWindow(hWndPrevious,
SW_RESTORE);
::SetForegroundWindow(hWndPrevious);
::SetForegroundWindow(
::GetLastActivePopup(hWndPrevious));
return TRUE;
}
// 继续寻找下一个窗口
hWndPrevious = ::GetWindow(hWndPrevious,
GW_HWNDNEXT);
}
if (::IsIconic(hWndPrevious))
:ShowWindow(hWndPrevious, SW_RESTORE);
// 将主窗激活
::SetForegroundWindow(hWndPrevious);
// 将主窗的对话框激活
::SetForegroundWindow(
::GetLastActivePopup(hWndPrevious));
return true;
}
return false;
}

CTestApp::InitInstance()
{
//设置标记
SetProp(m_pMainWnd->GetSafeHwnd(),"test","");
}

//去掉标记
CMainFrame::OnDestroy()
{
RemoveProp(m_hWnd,"test");
}

但是有的时候 程序退出后,在任务管理器中,以及各没有了test.exe进程,但是用上述函数判断的时候,却还提示
“程序已经存在”,请问是什么原因???? 谢谢

...全文

相关推荐

评论 4
收藏 已收藏
分享
返回顶部
ac_de
VC/MFC 16,550 成员 421,606 内容