public static Bitmap GetWindowImage(Control ctrl) { Bitmap bmp = GetWindowImage(PlatformInvokeUSER32.GetDC( ctrl.Handle)); //Recadre l'image (qui fait parfois la taille de tout l'écran Bitmap newBmp = new Bitmap(ctrl.Width, ctrl.Height); Graphics g = Graphics.FromImage(newBmp); g.DrawImage(bmp, 0, 0); g.Dispose(); bmp.Dispose(); return(newBmp); }
public static Bitmap GetWindowImage(IntPtr hDC) { //In size variable we shall keep the size of the screen. SIZE size; //Variable to keep the handle to bitmap. IntPtr hBitmap; //Here we get the handle to the desktop device context. //Here we make a compatible device context in memory for screen //device context. IntPtr hMemDC = PlatformInvokeGDI32.CreateCompatibleDC(hDC); //We pass SM_CXSCREEN constant to GetSystemMetrics to get the //X coordinates of the screen. size.cx = PlatformInvokeUSER32.GetSystemMetrics (PlatformInvokeUSER32.SM_CXSCREEN); //We pass SM_CYSCREEN constant to GetSystemMetrics to get the //Y coordinates of the screen. size.cy = PlatformInvokeUSER32.GetSystemMetrics (PlatformInvokeUSER32.SM_CYSCREEN); //We create a compatible bitmap of the screen size and using //the screen device context. hBitmap = PlatformInvokeGDI32.CreateCompatibleBitmap (hDC, size.cx, size.cy); //As hBitmap is IntPtr, we cannot check it against null. //For this purpose, IntPtr.Zero is used. if (hBitmap != IntPtr.Zero) { //Here we select the compatible bitmap in the memeory device //context and keep the refrence to the old bitmap. IntPtr hOld = (IntPtr)PlatformInvokeGDI32.SelectObject (hMemDC, hBitmap); //We copy the Bitmap to the memory device context. PlatformInvokeGDI32.BitBlt(hMemDC, 0, 0, size.cx, size.cy, hDC, 0, 0, PlatformInvokeGDI32.SRCCOPY); //We select the old bitmap back to the memory device context. PlatformInvokeGDI32.SelectObject(hMemDC, hOld); //We delete the memory device context. PlatformInvokeGDI32.DeleteDC(hMemDC); //We release the screen device context. PlatformInvokeUSER32.ReleaseDC(PlatformInvokeUSER32. GetDesktopWindow(), hDC); //Image is created by Image bitmap handle and stored in //local variable. Bitmap bmp = System.Drawing.Image.FromHbitmap(hBitmap); //Release the memory to avoid memory leaks. PlatformInvokeGDI32.DeleteObject(hBitmap); //This statement runs the garbage collector manually. GC.Collect(); //Return the bitmap return(bmp); } //If hBitmap is null, retun null. return(null); }
public static Bitmap GetDesktopImage( ) { return(GetWindowImage(PlatformInvokeUSER32.GetDC (PlatformInvokeUSER32.GetDesktopWindow()))); }