タイトルバー領域とソフトキー領域を含めて画面イメージをキャプチャーする

画面キャプチャーアプリとか作りたい人向けです。画面全体の画面イメージをキャプチャーする方法。

以下にサンプルコードを示す。

C#

  public class Window
  {
      private const int SRCCOPY = 0xCC0020;
 
      [DllImport("coredll.dll")]
      private static extern IntPtr GetDC(IntPtr hwnd);
 
      [DllImport("coredll.dll")]
      private static extern int BitBlt(IntPtr hDestDC,
          int x, int y, int nWidth, int nHeight, IntPtr hSrcDC,
          int xSrc, int ySrc, int dwRop);
 
      [DllImport("coredll.dll")]
      private static extern IntPtr ReleaseDC(IntPtr hwnd, IntPtr hdc);
 
      /// <summary>
      /// プライマリ ディスプレイのイメージを取得する
      /// </summary>
      /// <returns></returns>
      public static Bitmap CaptureScreen()
      {
          Bitmap bmp = new Bitmap(Screen.PrimaryScreen.Bounds.Width,
                                  Screen.PrimaryScreen.Bounds.Height);
 
          IntPtr disDC = GetDC(IntPtr.Zero);
          using (Graphics g = Graphics.FromImage(bmp))
          {
              IntPtr hDC = g.GetHdc();
              BitBlt(hDC, 0, 0, bmp.Width, bmp.Height, disDC, 0, 0, SRCCOPY);
              g.ReleaseHdc(hDC);
          }
          ReleaseDC(IntPtr.Zero, disDC);
 
          return bmp;
      }
  }