前言:
有时候,我们做的程序界面内容不希望被截图,那么如何实现呢?其实实现起来非常简单,就是一句话的事。
在主窗口show的时候,调用如下参数即可!需要注意的是Delphi中并没有定义WDA_EXCLUDEFROMCAPTURE值,如果需要使用,直接赋值 $11即可。
参考:SetWindowDisplayAffinity 函数 (winuser.h) - Win32 apps | Microsoft Learn
根据微软文档,调用如下函数:
BOOL SetWindowDisplayAffinity(
[in] HWND hWnd,
[in] DWORD dwAffinity
);
参数说明如下:
参数
[in] hWnd
类型:HWND
顶级窗口的句柄。 窗口必须属于当前进程。
[in] dwAffinity
类型:DWORD
指定窗口内容的显示位置的显示相关性设置。
此参数的取值可为下列值之一:
值 | 含义 |
---|---|
WDA_NONE 0x00000000 | 对窗口的显示位置没有限制。 |
WDA_MONITOR 0x00000001 | 窗口内容仅显示在监视器上。 在其他任何位置,窗口都会显示,其中不显示任何内容。 |
WDA_EXCLUDEFROMCAPTURE 0x00000011 | 窗口仅显示在监视器上。 在其他任何位置,窗口根本不显示。 此相关性的一个用途是用于显示视频录制控件的窗口,以便控件不包括在捕获中。 Windows 10版本 2004 中引入。 请参阅有关以前版本的 Windows 兼容性的备注。 |
返回值
类型: BOOL
如果函数成功,则返回 TRUE;例如,在非顶级窗口上进行函数调用时,它将返回 FALSE 。 要获得更多的错误信息,请调用 GetLastError。
注解
此函数和 GetWindowDisplayAffinity 旨在支持 Windows 7 中新增的窗口内容保护功能。 此功能使应用程序能够保护自己的屏幕窗口内容,使其免受通过一组特定的公共操作系统功能和 API 捕获或复制。 但是,仅当桌面窗口管理器 (DWM) 组合桌面时,它才有效。
请务必注意,与安全功能或数字版权管理 (DRM) 实现不同,无法保证使用 SetWindowDisplayAffinity 和 GetWindowDisplayAffinity 以及其他必要功能(如 DwmIsCompositionEnabled)将严格保护窗口内容,例如有人拍摄屏幕照片。
从 Windows 10 版本 2004 开始,WDA_EXCLUDEFROMCAPTURE 是受支持的值。 在以前版本的 Windows 上将显示相关性设置为WDA_EXCLUDEFROMCAPTURE的行为就像应用了WDA_MONITOR一样。
要求
展开表
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 7 [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2008 R2 [仅限桌面应用] |
目标平台 | Windows |
标头 | winuser.h (包括 Windows.h) |
Library | User32.lib |
DLL | User32.dll |
API 集 | 在 Windows 8.1) 中引入的 ext-ms-win-ntuser-window-l1-1-1 ( |
这下明白该如何做了吧?