如何撤消 SetWindowDisplayAffinity 方法?

问题描述

我有一个阻止屏幕捕获的 C# 应用程序,但我想禁用“黑屏”。

这是我的代码

[DllImport("user32.dll")]
public static extern uint SetwindowdisplayAffinity(IntPtr hWnd,uint dwAffinity);

protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);
    SetwindowdisplayAffinity(this.Handle,WDA_MONITOR);
}

我可以通过什么方式禁用它?

解决方法

使用 SetWindowDisplayAffinity,从捕获中排除窗口,传递 WDA_EXCLUDEFROMCAPTUREWDA_MONITOR 作为参数并撤消(包含在捕获中),传递 WDA_NONE

[DllImport("user32.dll")]
static extern uint SetWindowDisplayAffinity(IntPtr hWnd,uint dwAffinity);
const uint WDA_NONE = 0x00000000;
const uint WDA_MONITOR = 0x00000001;
const uint WDA_EXCLUDEFROMCAPTURE = 0x00000011;

private void includeButton_Click(object sender,EventArgs e)
{
    SetWindowDisplayAffinity(this.Handle,WDA_NONE);
}

private void excludeButton_Click(object sender,WDA_MONITOR);
}

捕获中包含的窗口:

included

从捕获中弹出的窗口:

excluded