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

わんくま同盟

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

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

■95727 / 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;

編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[3]: 画面のハードコピー /スポット参戦 →Re[5]: 画面のハードコピー /スポット参戦
 
上記関連ツリー

画面のハードコピー / スポット参戦 (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
      └ 画面のハードコピー / スポット参戦 (20/09/09(Wed) 17:19) #95727 ←Now
        └ Re[5]: 画面のハードコピー / スポット参戦 (20/09/16(Wed) 18:20) #95751 解決済み

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信