#define WDA_NONE 0x00000000
#define WDA_MONITOR 0x00000001
#define WDA_EXCLUDEFROMCAPTURE 0x00000011
c#调用示例
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
//using Windows.UI.ViewManagement;namespace WindowsFormsApp1
{public partial class Form1 : Form{public Form1(){InitializeComponent();}// 导入函数定义[DllImport("user32.dll")]private static extern uint SetWindowDisplayAffinity(IntPtr hwnd, uint dwAffinity);private void button1_Click(object sender, EventArgs e){// 获取窗口句柄IntPtr hwnd = this.Handle;uint WDA_EXCLUDEFROMCAPTURE = 0x00000011; //透明//uint WDA_MONITOR = 0x00000001; //显示为黑色// 设置窗口的透明属性SetWindowDisplayAffinity(hwnd, WDA_EXCLUDEFROMCAPTURE);timer1.Enabled = true;}private void button2_Click(object sender, EventArgs e){}private void timer1_Tick(object sender, EventArgs e){timer1.Enabled = false;// 获取窗口句柄IntPtr hwnd = this.Handle;uint WDA_NONE = 0x00000000;// 设置窗口不透明SetWindowDisplayAffinity(hwnd, WDA_NONE);}}
}
函数的说明参考下面网页
SetWindowDisplayAffinity 函数 (winuser.h) - Win32 apps | Microsoft Learnhttps://learn.microsoft.com/zh-CN/windows/win32/api/winuser/nf-winuser-setwindowdisplayaffinity
其中 winuser.h 定义了其中的第二个参数值
winuser.h中关于此函数的参数记录如下
#define WDA_NONE 0x00000000
#define WDA_MONITOR 0x00000001
#define WDA_EXCLUDEFROMCAPTURE 0x00000011
此函数和 GetWindowDisplayAffinity 旨在支持 Windows 7 中新增的窗口内容保护功能。 此功能使应用程序能够保护自己的屏幕窗口内容,防止通过一组特定的公共操作系统功能和 API 捕获或复制。 但是,仅当桌面窗口管理器 (DWM) 撰写桌面时,它才有效。
请务必注意,与安全功能或数字版权管理 (DRM) 实现不同,不能保证使用 SetWindowDisplayAffinity 和 GetWindowDisplayAffinity 以及其他必要功能(如 DwmIsCompositionEnabled)将严格保护窗口化内容,例如有人拍摄屏幕照片。
从 Windows 10 版本 2004 开始,WDA_EXCLUDEFROMCAPTURE 是受支持的值。 在以前版本的 Windows 上将显示关联设置为WDA_EXCLUDEFROMCAPTURE的行为就像应用了WDA_MONITOR一样。
特此记录
anlog
2023年9月9日