C# 截取后台窗口的图片

31次阅读
没有评论

共计 2181 个字符,预计需要花费 6 分钟才能阅读完成。

C#截取后台窗口的图片,自测可用,据说性能很一般,用用吧

struct RECT
{
    public int Left; // x position of upper-left corner
    public int Top; // y position of upper-left corner
    public int Right; // x position of lower-right corner
    public int Bottom; // y position of lower-right corner
}

public static Bitmap GetWindow(IntPtr hWnd)
{
    IntPtr hscrdc = GetWindowDC(hWnd);
    RECT rect = new RECT();
    GetWindowRect(hWnd, out rect);
    IntPtr hbitmap = CreateCompatibleBitmap(hscrdc, rect.Right - rect.Left, rect.Bottom - rect.Top);
    IntPtr hmemdc = CreateCompatibleDC(hscrdc);
    SelectObject(hmemdc, hbitmap);
    PrintWindow(hWnd, hmemdc, 0);
    Bitmap bmp = Bitmap.FromHbitmap(hbitmap);
    DeleteDC(hscrdc);
    DeleteDC(hmemdc);
    return bmp;
}

//API声明

[DllImport("user32.dll")]
private static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);

[DllImport("gdi32.dll")]
public static extern IntPtr CreateDC(
    string lpszDriver,        // driver name驱动名
    string lpszDevice,        // device name设备名
    string lpszOutput,        // not used; should be NULL
    IntPtr lpInitData  // optional printer data
);

[DllImport("gdi32.dll")]
public static extern int BitBlt(
    IntPtr hdcDest, // handle to destination DC目标设备的句柄
    int nXDest,  // x-coord of destination upper-left corner目标对象的左上角的X坐标
    int nYDest,  // y-coord of destination upper-left corner目标对象的左上角的Y坐标
    int nWidth,  // width of destination rectangle目标对象的矩形宽度
    int nHeight, // height of destination rectangle目标对象的矩形长度
    IntPtr hdcSrc,  // handle to source DC源设备的句柄
    int nXSrc,   // x-coordinate of source upper-left corner源对象的左上角的X坐标
    int nYSrc,   // y-coordinate of source upper-left corner源对象的左上角的Y坐标
    UInt32 dwRop  // raster operation code光栅的操作值
);

[DllImport("gdi32.dll")]
public static extern IntPtr CreateCompatibleDC(
    IntPtr hdc // handle to DC
);

[DllImport("gdi32.dll")]
public static extern IntPtr CreateCompatibleBitmap(
    IntPtr hdc,        // handle to DC
    int nWidth,     // width of bitmap, in pixels
    int nHeight     // height of bitmap, in pixels
);

[DllImport("gdi32.dll")]
public static extern IntPtr SelectObject(
    IntPtr hdc,          // handle to DC
    IntPtr hgdiobj   // handle to object
);

[DllImport("gdi32.dll")]
public static extern int DeleteDC(
    IntPtr hdc          // handle to DC
);

[DllImport("user32.dll")]
public static extern bool PrintWindow(
    IntPtr hwnd,               // Window to copy,Handle to the window that will be copied.
    IntPtr hdcBlt,             // HDC to print into,Handle to the device context.
    UInt32 nFlags              // Optional flags,Specifies the drawing options. It can be one of the following values.
);

[DllImport("user32.dll")]
public static extern IntPtr GetWindowDC(
    IntPtr hwnd
);

正文完
 0
flames
版权声明:本文于2024-10-12转载自 博客园 ,共计2181字。
转载提示:此文章非本站原创文章,若需转载请联系原作者获得转载授权。
评论(没有评论)