[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr SendMessage(HandleRef hWnd, int msg, IntPtr wParam, IntPtr lParam);
[DllImport("gdi32.dll", CharSet = CharSet.Auto, SetLastError = true, ExactSpelling = true)]
public static extern bool BitBlt(HandleRef hDC, int x, int y, int nWidth, int nHeight, HandleRef hSrcDC, int xSrc, int ySrc, int dwRop);
/// <summary>
/// 截取控件图像
/// </summary>
/// <param name="c"></param>
/// <returns></returns>
public static Bitmap GetControlBitmap(Control c)
{
if (c == null)
{
return null;
}
Bitmap image = new Bitmap(c.Width, c.Height);
Bitmap bmp = new Bitmap(c.Width, c.Height);
using (Graphics graphics = Graphics.FromImage(image))
{
IntPtr hdc = graphics.GetHdc();
SendMessage(new HandleRef(c, c.Handle), 0x317, hdc, (IntPtr)30);
using (Graphics graphics2 = Graphics.FromImage(bmp))
{
IntPtr handle = graphics2.GetHdc();
BitBlt(new HandleRef(graphics2, handle), 0, 0, c.Width, c.Height, new HandleRef(graphics, hdc), 0, 0, 0xcc0020);
graphics2.ReleaseHdcInternal(handle);
}
graphics.ReleaseHdcInternal(hdc);
}
return bmp;
}