ColinOL

A Small Website

用户工具

站点工具


wiki:csharp:winform-pingmujieping

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

wiki:csharp:winform-pingmujieping [2018/02/04 04:42] (当前版本)
行 1: 行 1:
 +====== 屏幕截屏 ======
  
 +<code csharp screencapture.cs>​
 +/// <​summary>​
 +/// 提供全屏和指定窗口的截图 以及保存为文件的类
 +/// </​summary>​
 +public class ScreenCapture
 +{
 +    /// <​summary>​
 +    /// 全屏截图
 +    /// </​summary>​
 +    /// <​returns></​returns>​
 +    public Image CaptureScreen()
 +    {
 +        return CaptureWindow( User32.GetDesktopWindow() );
 +    }
 +    /// <​summary>​
 +    /// 指定窗口截图
 +    /// </​summary>​
 +    /// <param name="​handle">​窗口句柄. (在windows应用程序中,​ 从Handle属性获得)</​param>​
 +    /// <​returns></​returns>​
 +    public Image CaptureWindow(IntPtr handle)
 +    {
 +        IntPtr hdcSrc = User32.GetWindowDC(handle);​
 +        User32.RECT windowRect = new User32.RECT();​
 +        User32.GetWindowRect(handle,​ref windowRect);​
 +        int width = windowRect.right - windowRect.left;​
 +        int height = windowRect.bottom - windowRect.top;​
 +        IntPtr hdcDest = GDI32.CreateCompatibleDC(hdcSrc);​
 +        IntPtr hBitmap = GDI32.CreateCompatibleBitmap(hdcSrc,​width,​height);​
 +        IntPtr hOld = GDI32.SelectObject(hdcDest,​hBitmap);​
 +        GDI32.BitBlt(hdcDest,​0,​0,​width,​height,​hdcSrc,​0,​0,​GDI32.SRCCOPY);​
 +        GDI32.SelectObject(hdcDest,​hOld);​
 +        GDI32.DeleteDC(hdcDest);​
 +        User32.ReleaseDC(handle,​hdcSrc);​
 +        Image img = Image.FromHbitmap(hBitmap);​
 +        GDI32.DeleteObject(hBitmap);​
 +        return img;
 +    }
 +    /// <​summary>​
 +    /// 指定窗口截图 保存为图片文件
 +    /// </​summary>​
 +    /// <param name="​handle"></​param>​
 +    /// <param name="​filename"></​param>​
 +    /// <param name="​format"></​param>​
 +    public void CaptureWindowToFile(IntPtr handle, string filename, ImageFormat format)
 +    {
 +        Image img = CaptureWindow(handle);​
 +        img.Save(filename,​format);​
 +    }
 +    /// <​summary>​
 +    /// 全屏截图 保存为文件
 +    /// </​summary>​
 +    /// <param name="​filename"></​param>​
 +    /// <param name="​format"></​param>​
 +    public void CaptureScreenToFile(string filename, ImageFormat format)
 +    {
 +        Image img = CaptureScreen();​
 +        img.Save(filename,​format);​
 +    }
 +
 +    /// <​summary>​
 +    /// 辅助类 定义 Gdi32 API 函数
 +    /// </​summary>​
 +    private class GDI32
 +    {
 +      ​
 +        public const int SRCCOPY = 0x00CC0020;
 +        [DllImport("​gdi32.dll"​)]
 +        public static extern bool BitBlt(IntPtr hObject,int nXDest,int nYDest,
 +            int nWidth,int nHeight,​IntPtr hObjectSource,​
 +            int nXSrc,int nYSrc,int dwRop);
 +        [DllImport("​gdi32.dll"​)]
 +        public static extern IntPtr CreateCompatibleBitmap(IntPtr hDC,int nWidth,
 +            int nHeight);
 +        [DllImport("​gdi32.dll"​)]
 +        public static extern IntPtr CreateCompatibleDC(IntPtr hDC);
 +        [DllImport("​gdi32.dll"​)]
 +        public static extern bool DeleteDC(IntPtr hDC);
 +        [DllImport("​gdi32.dll"​)]
 +        public static extern bool DeleteObject(IntPtr hObject);
 +        [DllImport("​gdi32.dll"​)]
 +        public static extern IntPtr SelectObject(IntPtr hDC,IntPtr hObject);
 +    }
 +
 +    /// <​summary>​
 +    /// 辅助类 定义User32 API函数
 +    /// </​summary>​
 +    private class User32
 +    {
 +        [StructLayout(LayoutKind.Sequential)]
 +        public struct RECT
 +        {
 +            public int left;
 +            public int top;
 +            public int right;
 +            public int bottom;
 +        }
 +        [DllImport("​user32.dll"​)]
 +        public static extern IntPtr GetDesktopWindow();​
 +        [DllImport("​user32.dll"​)]
 +        public static extern IntPtr GetWindowDC(IntPtr hWnd);
 +        [DllImport("​user32.dll"​)]
 +        public static extern IntPtr ReleaseDC(IntPtr hWnd,IntPtr hDC);
 +        [DllImport("​user32.dll"​)]
 +        public static extern IntPtr GetWindowRect(IntPtr hWnd,ref RECT rect);
 +    }
 +}
 +
 +</​code>​
wiki/csharp/winform-pingmujieping.txt · 最后更改: 2018/02/04 04:42 (外部编辑)