gpt4 book ai didi

c# - 使用 C# 和 WPF 在 Windows 上防止屏幕捕获

转载 作者:行者123 更新时间:2023-11-30 12:54:39 42 4
gpt4 key购买 nike

我试图阻止像 Microsoft Office 这样的 WPF 窗口的屏幕截图。

我尝试使用 SetWindowDisplayAffinity,但它总是返回 false,我真的不知道在哪里调用这个方法。

应用程序.xaml:

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool SetWindowDisplayAffinity(IntPtr hwnd, DisplayAffinity affinity);

protected override void OnStartup(StartupEventArgs e)
{
var mainView = new MainWindow();
var ok = SetWindowDisplayAffinity(Process.GetCurrentProcess().MainWindowHandle, DisplayAffinity.Monitor);
mainView.Show();
}

但是 SetWindowDisplayAffinity 方法总是返回 false。我发现了另一个问题,但它没有说明这个方法应该在哪里。

最佳答案

将事件处理程序添加到主窗口中的 Loaded 事件:Loaded="Window_Loaded" :

然后像下面这样定义该方法:

private void Window_Loaded(object sender, RoutedEventArgs e)
{
IntPtr handle = (new WindowInteropHelper(this)).Handle;
bool s = SetWindowDisplayAffinity(handle, DisplayAffinity.Monitor);
MessageBox.Show(s.ToString());
}

然后它将返回 True,并且在截屏时该窗口会变黑。

如果在 InitializeComponent(); 之后的构造函数中放置相同的代码然后它返回 False 并且窗口不会变黑。

请注意 (new WindowInteropHelper(this)).Handle将等于 0如果窗口未加载,加载后它将有一个值。

关于c# - 使用 C# 和 WPF 在 Windows 上防止屏幕捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54558151/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com