使用C#在WPF中截取屏幕截图时为什么会出现隐藏窗口?

时间:2014-07-18 15:35:39

标签: c# .net wpf windows window

我有一个WPF应用程序可以帮助我获取整个屏幕的截图。

该应用程序包含一个小窗口,里面有一个按钮,如果我点击它,就会拍摄一个屏幕并保存在我的驱动器上。

我想在捕获之前隐藏这个小窗口,所以它不会被包含在捕获中,这是我尝试过的:

StartSnipping = new RelayCommand(() =>
                 {
                   // I hide it here !!
                   WindowVisibility = Visibility.Hidden;                              

                   //Than I take the screen shot
                   var screen = Screen.PrimaryScreen;
                   var bitmap = new Bitmap(screen.Bounds.Width, screen.Bounds.Height);
                   using (var graphics = Graphics.FromImage(bitmap))
                   {
                     graphics.CopyFromScreen(new Point(screen.Bounds.Left, 
                                                       screen.Bounds.Top),
                                             new Point(0, 0), 
                                             screen.Bounds.Size);
                   }

                   //I save the screen shot
                   bitmap.Save(@"C:/Users/Aymen/Desktop/test.png", ImageFormat.Png);
                 }); 

现在,假设行:

WindowVisibility = Visibility.Hidden;

确实有效,嗯,我确定这一点,因为在所有方法完成运行后,窗口确实是隐藏的。

假设屏幕截图已成功拍摄并保存并仍然包含该窗口,该窗口应该在屏幕截图前隐藏1秒钟,我的问题是:

为什么这个隐藏的窗口仍然出现在屏幕截图中?我该怎么办才能使它不出现在截图中?

1 个答案:

答案 0 :(得分:1)

不确定,但似乎使用:

WindowVisibility = Visibility.Hidden; 

在拍摄屏幕截图时不会阻止窗口显示,我不得不使用.Hide()方法隐藏窗口:

Application.Current.MainWindow.Hide();

这很有效,胸围仍然没有任何解释为什么Visibility.Hidden会让窗口出现在屏幕截图中。