The .NET Framework doesn't expose any classes for capturing the full screen (often referred to as the desktop window). However, you can access these features by using P/Invoke with the Win32 API.
The first step is to create a class that encapsulates the Win32 API functions you need to use. The following example shows a class that declares these functions and uses them in a public Capture method to return a .NET Image object with the desktop window.
using System;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;
public class DesktopCapture {
[DllImport("user32.dll")]
private extern static IntPtr GetDesktopWindow();
[DllImport("user32.dll")]
private extern static IntPtr GetDC(IntPtr windowHandle);
[DllImport("gdi32.dll")]
private extern static IntPtr GetCurrentObject(IntPtr hdc,
ushort objectType);
[DllImport("user32.dll")]
private extern static void ReleaseDC( IntPtr hdc );
const int OBJ_BITMAP = 7;
public static Bitmap Capture() {
// Get the device context for the desktop window.
IntPtr desktopWindow = GetDesktopWindow();
IntPtr desktopDC = GetDC( desktopWindow );
// Get a GDI handle to the image.
IntPtr desktopBitmap = GetCurrentObject(desktopDC, OBJ_BITMAP);
// Use the handle to create a .NET Image object.
Bitmap desktopImage = Image.FromHbitmap( desktopBitmap );
// Release the device context and return the image.
ReleaseDC(desktopDC);
return desktopImage;
}
}
The next step is to create a client that can use this functionality. The following code creates a form that displays the captured image in a picture box.
public class ScreenCapture : System.Windows.Forms.Form {
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.Panel panel1;
// (Designer code omitted.)
private void cmdCapture_Click(object sender, System.EventArgs e) {
pictureBox1.Image = DesktopCapture.Capture();
pictureBox1.Size = pictureBox1.Image.Size;
}
}
RSS Feed (xml)


No comments:
Post a Comment