如何筛选隐藏在另一个winform后面的winform?

时间:2012-08-16 16:09:07

标签: .net winforms screen-capture delphi-prism

我需要屏幕捕获一个在另一个窗口后面或前面的winform,而不是其他任何东西。

我可以屏幕捕获一个winform,但它基本上捕获了该区域内的任何内容。

以下是我的截屏方式。

method ControlWin.capturescreen;
begin
        var myGraphics := self.CreateGraphics;
        var memoryGraphics := self.CreateGraphics;
        var s := self.Size;
        ControlScreen := new Bitmap(s.Width, s.Height, myGraphics);
        memoryGraphics := Graphics.FromImage(ControlScreen);
        memoryGraphics.CopyFromScreen(self.Location.X, self.Location.Y, 0, 0, s);
end;

以下是它的外观:

enter image description here

C#或delphi-prism中的任何提示或线索都将受到高度赞赏。谢谢,

1 个答案:

答案 0 :(得分:4)

这就是C#中的技巧。

_onTopForm是TopMost设置为true的第二种形式。将它放在Form1上。

单击按钮,Form1的屏幕截图将写入磁盘。 _onTopForm不会出现在屏幕截图中。

public partial class Form1 : Form
{
    readonly OnTopForm _onTopForm = new OnTopForm();

    public Form1()
    {
        InitializeComponent();
        _onTopForm.Show();
        _onTopForm.TopMost = true;
    }

    private void Button1Click(object sender, EventArgs e)
    {
        Bitmap bmp = new Bitmap(Width, Height);
        DrawToBitmap(bmp, new Rectangle(Point.Empty, bmp.Size));

        using (FileStream fs = new FileStream("C:\\temp\\screenshot.jpeg", FileMode.OpenOrCreate))
        {
            bmp.Save(fs, ImageFormat.Jpeg);
        }
    }
}

public partial class OnTopForm : Form
{
    public OnTopForm()
    {
        InitializeComponent();
    }
}
相关问题