|
画面がスクリーンからはみ出ている時に、はみ出た部分のキャプチャができない問題は残っていますが、 画面の上下左右に余分な枠が入ってしまう問題は、自己解決したので報告です。
//定義 [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;
|