110,533
社区成员
发帖
与我相关
我的任务
分享
public static Bitmap CaptureDesktop()
{
Bitmap image=null;
Rect rect = new Rect();
rect.Width = Screen.PrimaryScreen.Bounds.Width;
rect.Height = Screen.PrimaryScreen.Bounds.Height;
IntPtr dcTmp = CreateDC("DISPLAY", "DISPLAY", (IntPtr)null, (IntPtr)null);
Graphics gScreen = Graphics.FromHdc(dcTmp);
try
{
image = new Bitmap((int)(rect.Width), (int)(rect.Height), System.Drawing.Imaging.PixelFormat.Format24bppRgb);
Graphics gImage = Graphics.FromImage(image);
IntPtr dcImage = gImage.GetHdc();
IntPtr dcScreen = gScreen.GetHdc();
BitBlt(dcImage, 0, 0, (int)(rect.Width), (int)(rect.Height), dcScreen, (int)(rect.Left), (int)(rect.Top), TernaryRasterOperations.SRCCOPY);
gScreen.ReleaseHdc(dcScreen);
gScreen.Dispose(); //缺少Dispose() 会有内存漏洞
gImage.ReleaseHdc(dcImage);
gImage.Dispose(); //缺少Dispose() 会有内存漏洞
}
catch
{ }
//ReleaseDC(IntPtr.Zero, dcTmp);
DeleteDC(dcTmp);
return image; //外部使用后也要调用 Dispose();
}