网上搜了遍,很少看到有人提起怎么防止MFC程序的窗口被别的软件隐藏(如禁止句柄查看精灵隐藏)。
看到了一些帖,说用hook的,太麻烦了。
说拦截WM_SHOWWINDOW,试过了没有效果。
void CDlg::OnShowWindow(BOOL bShow, UINT nStatus){if (!bShow)AfxMessageBox(_T("有程序试图隐藏窗口!"));elseCDialog::OnShowWindow(bShow, nStatus);}弹窗执行了,但点击弹窗后程序窗口照样被隐藏。
还有些帖,说拦截WM_WINDOWPOSCHANGED,同样没有效果。
void CDlg::OnWindowPosChanged(WINDOWPOS* lpwndpos){if (lpwndpos->flags&SWP_HIDEWINDOW){AfxMessageBox(_T("隐藏窗口!已拒绝!"));lpwndpos->flags &= ~SWP_HIDEWINDOW;}elseCDialog::OnWindowPosChanged(lpwndpos);}在弹窗出来之前窗口已经被隐藏了。。。
真正有效的是拦截WM_WINDOWPOSCHANGING,代码如下:
void CDlg::OnWindowPosChanging(WINDOWPOS* lpwndpos){if (lpwndpos->flags&SWP_HIDEWINDOW){AfxMessageBox(_T("正在隐藏窗口!已拒绝!"));lpwndpos->flags &= ~SWP_HIDEWINDOW;}CDialog::OnWindowPosChanging(lpwndpos);}真正起作用的是“lpwndpos->flags &= ~SWP_HIDEWINDOW”这句,从flags里去掉隐藏窗口的标记。
有兴趣的自己测试。