首页 > 编程知识 正文

mfc 隐藏窗口

时间:2023-05-06 09:50:25 阅读:246339 作者:4881

网上搜了遍,很少看到有人提起怎么防止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里去掉隐藏窗口的标记。

有兴趣的自己测试。

使用docker 部署mysql突然连接不上的问题及解决方法

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。