屏幕覆盖截图

屏幕覆盖截图

问题描述:

我想通过C#覆盖整个屏幕上的灰色,半透明区域。这可能通过Windows窗体来完成,我将如何去做这件事?屏幕覆盖截图

+1

嘿,也许你终于可以让那该死的UAC提示很有用,如果你可以把你的窗口放在它的提示符上...... – 2010-02-01 12:52:44

当然,只需创建一个覆盖所有桌面屏幕的无边框半透明窗口即可。

您可以找到合适的矩形覆盖所有屏幕具有以下LINQ:

Rectangle bounds = Screen.AllScreens 
         .Select(x => x.Bounds) 
         .Aggregate(Rectangle.Union); 

然后设置左,上,宽度和窗口的高度,从bounds

+0

对,我想知道如何做到这一点。我似乎无法创建无边框窗口,并且每当我选择“最大化”窗体时,它不会覆盖整个屏幕,并且会丢失底部5个像素和右侧10个像素。 – cam 2010-02-01 12:50:57

+4

最大化可能不是你想要的。您希望窗口的大小与完整的可见屏幕区域相同(可能在所有屏幕上),并且可以通过将“FormBorderStyle”属性设置为“无”来使其无边界。 – Joey 2010-02-01 12:54:13

+2

+1好用的Linq处理多个屏幕,谢谢! – BillW 2010-02-01 13:59:25

除使用Johannes的建议将FormBorderStyle属性设置为None,我还会在此窗体上设置以下用于“调暗”屏幕的属性:

  1. TopMost,Show InTaskBar,控制盒,MaximizeBox,MinimizeBox:“假
  2. Text属性:清除它

我会设置在窗体的Load事件中的‘模糊了’窗体的尺寸:我会用优雅如果我想处理多个监视器的情况,Rob在Rob的答案中设置了添加到项目中的Form的边界。如果我只是想只处理了一个监视器,我只是不喜欢简单的东西:

// in the Load Event of the "dim-out" Form 
    this.Bounds = Screen.PrimaryScreen.Bounds; 

然后,当然,你可以显示这个“模糊了”表格时您在响应任何有关需要您可见的表单。

显示“暗淡”窗体将使其出现在应用程序的其他可见窗体上(除非其中一个窗体已设置了TopMost或TopLevel属性)。

但是,您可以实现的一个很好的效果是在显示MessageBox(或模式显示的窗体)之前显示您的“模糊”窗体:这意味着您将有消息框对话框(或模式窗体) “在前面”以及其后面的所有内容“变暗”。

因此,这里是你的代码如何显示“变暗”的形式看起来:

dimmedForm.Show(); 

    // change these to suit your taste or purpose 
    // this.BringToFront(); 
    // dimmedForm.BringToFront(); 

    // example of showing a MessageBox over the dimmedForm 
    // which will block the current thread 
    MessageBox.Show("why not ?"); 

    // now hide the dimmedForm 
    dimmedForm.Hide(); 

你可能想看看“顶层属性(它不是在设计时暴露的),并刷新您对该财产如何影响屏幕上的表单顺序以及检查表单的TopMost属性(在设计时暴露)的知识。

+2

我们需要一个“合并答案”功能:)(+1) – 2010-02-01 14:50:00