【问题标题】:How to screen capture a winform hidden behind another winform?如何屏幕捕获隐藏在另一个winform后面的winform?
【发布时间】:2012-08-16 16:09:06
【问题描述】:

我需要截屏一个在另一个窗口后面或前面的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;

这是它的外观:

C# 或 delphi-prism 中的任何提示或线索将不胜感激。谢谢,

【问题讨论】:

  • 您需要 X 射线规格。你可能会从表单的 DrawToBitmap() 方法中得到一个集合。

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


【解决方案1】:

这在 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();
    }
}

【讨论】:

  • 詹姆斯,你的例子太棒了。它实际上做了我正在寻找的东西。谢谢。
猜你喜欢
  • 1970-01-01
  • 2013-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-27
  • 2019-07-31
相关资源
最近更新 更多