1

別のウィンドウの後ろまたは前にある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のヒントや手がかりは大歓迎です。ありがとう、

4

1 に答える 1

4

これはC#でのトリックです。

_onTopFormは、TopMostがtrueに設定された2番目のフォームです。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();
    }
}
于 2012-08-16T18:37:43.247 に答える