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

わんくま同盟

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

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

ツリー一括表示

画面のハードコピー /スポット参戦 (20/09/09(Wed) 10:19) #95720
Re[1]: 画面のハードコピー /魔界の仮面弁士 (20/09/09(Wed) 10:22) #95721
  └ Re[2]: 画面のハードコピー /スポット参戦 (20/09/09(Wed) 11:57) #95723
    └ Re[3]: 画面のハードコピー /スポット参戦 (20/09/09(Wed) 12:07) #95724
      └ Re[4]: 画面のハードコピー /スポット参戦 (20/09/09(Wed) 17:19) #95727
        └ Re[5]: 画面のハードコピー /スポット参戦 (20/09/16(Wed) 18:20) #95751 解決済み


親記事 / ▼[ 95721 ]
■95720 / 親階層)  画面のハードコピー
□投稿者/ スポット参戦 (1回)-(2020/09/09(Wed) 10:19:28)

分類:[C#] 

Windows 10 で、画面(フォーム)をハードコピーするプログラムを、DrawToBitmap() で行うと、画面が、Windows 7 になってしまいます。
また、画面を最大化してハードコピーした時にも、余分な枠が入っています。
解決策ありますか?

[ □ Tree ] 返信 編集キー/

▲[ 95720 ] / ▼[ 95723 ]
■95721 / 1階層)  Re[1]: 画面のハードコピー
□投稿者/ 魔界の仮面弁士 (2830回)-(2020/09/09(Wed) 10:22:12)
No95720 (スポット参戦 さん) に返信
> Windows 10 で、画面(フォーム)をハードコピーするプログラムを、
> DrawToBitmap() で行うと、画面が、Windows 7 になってしまいます。

目的にもよりますが、DrawToBitmap メソッドのかわりに、
Graphics.CopyFromScreen メソッドを使えないでしょうか。
https://dobon.net/vb/dotnet/graphics/screencapture.html#section2
[ 親 95720 / □ Tree ] 返信 編集キー/

▲[ 95721 ] / ▼[ 95724 ]
■95723 / 2階層)  Re[2]: 画面のハードコピー
□投稿者/ スポット参戦 (2回)-(2020/09/09(Wed) 11:57:46)
No95721 (魔界の仮面弁士 さん) に返信
Graphics.CopyFromScreen メソッドで Windows 7 の問題は解決しました。
ありがとうございます。

ただ、画面の上下左右に余分な枠が入ってしまいます。
これを無くしたいです。
[ 親 95720 / □ Tree ] 返信 編集キー/

▲[ 95723 ] / ▼[ 95727 ]
■95724 / 3階層)  Re[3]: 画面のハードコピー
□投稿者/ スポット参戦 (3回)-(2020/09/09(Wed) 12:07:07)
No95721 (魔界の仮面弁士 さん) に返信
問題がありました。
Graphics.CopyFromScreen メソッドは、
画面がスクリーンからはみ出ている時に、はみ出た部分のキャプチャができませんでした。
[ 親 95720 / □ Tree ] 返信 編集キー/

▲[ 95724 ] / ▼[ 95751 ]
■95727 / 4階層)  Re[4]: 画面のハードコピー
□投稿者/ スポット参戦 (4回)-(2020/09/09(Wed) 17:19:27)
画面がスクリーンからはみ出ている時に、はみ出た部分のキャプチャができない問題は残っていますが、
画面の上下左右に余分な枠が入ってしまう問題は、自己解決したので報告です。

//定義
[StructLayout(LayoutKind.Sequential)]
private struct Rect
{
public int left;
public int top;
public int right;
public int bottom;
}

private const int DWMWA_EXTENDED_FRAME_BOUNDS = 9;

[DllImport("dwmapi.dll")]
extern static int DwmGetWindowAttribute(IntPtr hWnd, int dwAttribute, out Rect rect, int cbAttribute);

//ウィンドウ・ハンドルを取得する
IntPtr hWnd = this.Handle;
//外見上のウィンドウサイズを取得する
Rect bounds;
DwmGetWindowAttribute(hWnd, DWMWA_EXTENDED_FRAME_BOUNDS, out bounds, Marshal.SizeOf(typeof(Rect)));
//Bitmapの作成
Bitmap bmp = new Bitmap(bounds.right - bounds.left, bounds.bottom - bounds.top);
//Graphicsの作成
Graphics g = Graphics.FromImage(bmp);
//画面をコピーする
g.CopyFromScreen(bounds.left, bounds.top, 0, 0, bmp.Size);
//解放
g.Dispose();
//表示
PictureBox1.Image = bmp;

[ 親 95720 / □ Tree ] 返信 編集キー/

▲[ 95727 ] / 返信無し
■95751 / 5階層)  Re[5]: 画面のハードコピー
□投稿者/ スポット参戦 (5回)-(2020/09/16(Wed) 18:20:39)
魔界の仮面弁士さん
ありがとうございました。
解決済み
[ 親 95720 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -