酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Windows Mobile(.NET Compact Frameworks)でタイトルバー領域とソフトキー領域を含めて画面イメージをキャプチャーする

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


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

  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;
      }
  }