29 Ekim 2011 Cumartesi

C#'da bir windowun ekran görüntüsü almak

Handle değeri bilinen bir windowun c#'da ekran görüntüsü almak istiyorsak yapmamız gereken şu oluyor;


Önce user32.dll altındaki bu iki fonksiyonu ekliyoruz.

[DllImport("user32.dll")]
private static extern bool GetWindowRect(IntPtr hWnd, ref Rectangle rect);

[DllImport("user32.dll")]
public static extern bool PrintWindow(IntPtr hWnd, IntPtr hdcBlt, int nFlags);

GetWindowRect() fonksiyonu handle değeri verilen windowun Rectangle tipinde referansı verilmiş konum bilgisini verir. Bu tipteki yapıyı da şöyle tanımlıyoruz;

[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int Left; // sol üst köşenin x tipinde poziyonu
public int Top; // sol üst köşenin y tipinde pozisyonu
public int Right; // sağ alt köşenin x tipinde pozisyonu
public int Bottom; // sağ alt köşenin y tipinde pozisyonu
}

Daha sonra da iş yapan methodumuz şu şekilde;

private void goruntuAl(IntPtr handle)

{
RECT wRect = new RECT();
GetWindowRect(handle, ref myRect);
int width = myRect.Right - myRect.Left;
int height = myRect.Bottom - myRect.Top;
Bitmap bmp = new Bitmap(width, height);
Graphics gfxBmp = Graphics.FromImage(bmp);
IntPtr hdcBitmap = gfxBmp.GetHdc();
PrintWindow(handle, hdcBitmap, 0);
gfxBmp.ReleaseHdc(hdcBitmap);
gfxBmp.Dispose();
mp.Save("test.png");
}

Hiç yorum yok: