#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);
-
- }
- }
- }
函数的说明参考下面网页
其中 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日