【发布时间】:2020-12-01 13:06:04
【问题描述】:
我有 1 个图片控制,并希望使其不能录屏。
在.Net中,我一直在使用SetWindowDisplayAffinity:
WDA_MONTOR = 1;
SetWindowDisplayAffinity(this.Handle, WDA_MONTOR);
现在我已迁移到 MFC 以获得原生性能。
我正在使用以下代码,它不会阻止 screenshots:
HWND Handle = this->GetDlgItem(IDC_SCREEN)->m_hWnd;
SetWindowDisplayAffinity(Handle, WDA_MONITOR);
完整示例:
if(SetWindowDisplayAffinity(hWnd, WDA_MONITOR)==false)
{
wchar_t buf[256];
FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
buf, (sizeof(buf) / sizeof(wchar_t)), NULL);
AfxMessageBox(buf);
}
GetLastError 说“参数不正确”。
【问题讨论】:
-
我不熟悉 API 但标志不应该是
WDA_EXCLUDEFROMCAPTURE吗?根据文档,返回值为BOOL,如果FALSE,您可以使用GetLastError进行调查。 -
WDA_EXCLUDEFROMCAPTURE 在 Windows 10 中引入。GetLastError 表示
parameter is incorrect。见代码rentry.co/agvyh -
我用此信息更新了您的问题,因为它有帮助。但是,这超出了我的知识范围,所以也许其他人可以提供帮助。
-
.NET 版本正在传递窗体的窗口句柄(顶级窗口),但您的 MFC 版本正在传递控件的窗口句柄(子窗口)。使用顶级窗口。
-
您应该选择要保护的顶级窗口。
标签: c++ windows mfc screenshot