2011年7月4日 星期一

視窗截圖

/* 目標視窗必須顯示在最上層
 * 引入 Win32 API 中的 User32.DLL
 * 需要加上 using System.Runtime.InteropServices;
 */
[DllImport("user32.dll")]
public static extern Boolean GetWindowRect(IntPtr hWnd, ref Rectangle bounds);

public void CaptureWindow () {
  /* 取得目標視窗的 Handle
   * 需要加上 using System.Diagnostics;
   */
  Process[] process = Process.GetProcessesByName("notepad");

  /* 取得該視窗的大小與位置 */
  Rectangle bounds;
  GetWindowRect(process[0].MainWindowHandle, ref bounds);

  /* 抓取截圖 */
  Bitmap screenshot = new Bitmap(bounds.Width, bounds.Height, PixelFormat.Format32bppArgb);
  Graphics gfx = Graphics.FromImage(screenshot);
  gfx.CopyFromScreen(bounds.X, bounds.Y, 0, 0, bounds.Size, CopyPixelOperation.SourceCopy);

  /* 利用 PictureBox 顯示出來 */
  imageView.Image = (Image) screenshot;
  imageView.Update();
}

沒有留言: