• C#屏幕截图类


    [Visual Stdio 2005下调试通过]

    ---------------------------------------------------------------------------------------------------------------------------------------

        /// <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);
            }
        }
  • 相关阅读:
    opencv 读写图像文件
    opencv 图像透明
    c# 异步事件
    c++读写文件
    Delphi XE UniGUI UniSession文件下载的方式(SendFile、SendStream )
    Delphi XE UniGUI ExtJS [8] 自定义JavaScript文件调用
    Delphi XE UniGUI ExtJS [7] Delhi 动态添加 ClientEvents.ExtEvents 事件
    Delphi XE UniGUI ExtJS [6] fireEvent 事件 模拟按键点击(JS、ExtJS、Delphi)
    Delphi XE UniGUI ExtJS [5] 鼠标和Key事件
    Delphi XE UniGUI ExtJS [4] Ajax、Response(响应) 的使用
  • 原文地址:https://www.cnblogs.com/ryhan/p/2106180.html
Copyright © 2020-2023  润新知