SetWindowDisplayAffinity 函数设置窗体透明

#define WDA_NONE        0x00000000
#define WDA_MONITOR     0x00000001
#define WDA_EXCLUDEFROMCAPTURE 0x00000011

SetWindowDisplayAffinity 函数设置窗体透明_第1张图片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 Learnicon-default.png?t=N7T8https://learn.microsoft.com/zh-CN/windows/win32/api/winuser/nf-winuser-setwindowdisplayaffinity

其中 winuser.h 定义了其中的第二个参数值

winuser.h中关于此函数的参数记录如下

SetWindowDisplayAffinity 函数设置窗体透明_第2张图片

#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日

你可能感兴趣的:(笔记,窗口内容保护,截屏)