C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

WPFでスクリーンショット

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■96472 / inTopicNo.1)  WPFでスクリーンショット
  
□投稿者/ 紅 (3回)-(2020/11/27(Fri) 14:59:34)

分類:[.NET 全般] 

開発環境:VS2019、.NET5、WPF

お世話になっております。
3秒おきにスクリーンショットを撮るツールを作っており難航しています。

WinFormならGraphicsクラスのCopyFromScreenメソッドで画面のスクショを撮
れますが――
WPF(NET5)の標準クラスで、同じ機能を実現できますでしょうか?
(WPFの勉強がてらWinFormで作ったツールを、WPFで作り直しています)
できればNugetでライブラリを使わずに行えればと考えています。

Windowコントロールのスクショを撮るサンプルはネットに多くあり、下記のコ
ードで検証しています。
このコードを改良して画面のスクショ撮れないものかと考えております。
以上よろしくお願いします。

>Windowのコントロールをスクショするサンプル
// targetはVisual型です。
Rect bounds = VisualTreeHelper.GetDescendantBounds(target);
var bmp = new RenderTargetBitmap((Int32)bounds.Width, (Int32)bounds.Height, 96, 96, PixelFormats.Pbgra32);
DrawingVisual dv = new DrawingVisual();
using (DrawingContext context = dv.RenderOpen())
{
    VisualBrush brush = new VisualBrush(target);
    context.DrawRectangle(brush, null, new Rect(new Point(), bounds.Size));
}

bmp.Render(dv);
var encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bmp));
using (Stream stream = File.Create(fileName))
{
    encoder.Save(stream);
}

引用返信 編集キー/
■96475 / inTopicNo.2)  Re[1]: WPFでスクリーンショット
□投稿者/ Hongliang (1127回)-(2020/11/27(Fri) 16:12:09)
System.Windows名前空間以下に、自分のウィンドウ外にアクセスする機能は存在しなかったと思います。
// あ、System.Windows.Shellはちょっと微妙かな…。

単にスクリーンショットを取ってファイルに保存するだけなら、今のままSystem.Drawingを使い続けるのが(それで問題ないなら)最善かと思います。
引用返信 編集キー/
■96476 / inTopicNo.3)  Re[2]: WPFでスクリーンショット
□投稿者/ 紅 (5回)-(2020/11/27(Fri) 16:35:40)
Hongliangさん、ご回答ありがとうございます。
Windowの境界外だと無理なんですね。情報助かります。
画面のスクショを撮りたいだけなので、System.Drawingを使う方向で考えます。
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ