WPF效果第二百四十一篇之阻止屏幕截图

大过年的一朋友让我帮他实现一个关于阻止他的软件被截图的小功能;最终的效果:

1、直接引用系统自带的:

[DllImport("User32.dll", SetLastError = true)]
private static extern bool SetWindowDisplayAffinity(IntPtr hWnd, uint dwAffinity);

2、必须在Load事件里面:

/// <summary>
/// 这里是截取的是个黑框
/// </summary>
public const int WDA_MONITOR = 0x00000001;


/// <summary>
/// 这里直接是透明的
/// </summary>
public const int WDA_EXCLUDEFROMCAPTURE = 0x00000011;


private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
    IntPtr hWnd = IntPtr.Zero;
    //获取 WPF 窗口的句柄
    HwndSource hwndSource = PresentationSource.FromVisual(this) as HwndSource;
    if (hwndSource != null)
    {
        hWnd = hwndSource.Handle;
    }
    if (hWnd != IntPtr.Zero)
    {
        bool result = SetWindowDisplayAffinity(hWnd, WDA_EXCLUDEFROMCAPTURE);
        if (!result)
        {
            int errorCode = Marshal.GetLastWin32Error();
            Debug.WriteLine("Error: " + errorCode);
        }
    }
}

3、当AllowsTransparency="True"失效,但还是要透明背景异形窗口,然后找到了大佬给推荐的高性能的无边框方案:

WindowStyle="None" ResizeMode="CanMinimize/NoResize"
<WindowChrome.WindowChrome>
    <WindowChrome GlassFrameThickness="-1" />
</WindowChrome.WindowChrome>

简单效果就这么完事了;毕竟咱也是第一次玩耍94c8d49c879556c2d1ef7f527e6cdd55.png;万一人家拿着手机直接拍界面呢,这时我们应该直接调用摄像头通过图像识别技术再来动态控制软件的呈现format,png;编程不息、Bug不止、无Bug、无生活afe48ebef916e9abd1be847933acd37f.png;改bug的冷静、编码的激情、完成后的喜悦、挖坑的激动 、填坑的兴奋;这也许就是屌丝程序员的乐趣吧;今天就到这里吧;希望自己有动力一步一步坚持下去;生命不息,代码不止;大家抽空可以看看今天分享的效果,有好的意见和想法,可以在留言板随意留言;我看到后会第一时间回复大家,多谢大家的一直默默的关注和支持!如果觉得不错,那就伸出您的小手点个赞并关注一下,多谢您的支持!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值