• C# 用API截取桌面屏幕


    struct GetDeviceCapsIndex
            {
                public static readonly int DRIVERVERSION = 0;
                public static readonly int HORZSIZE = 4;
                public static readonly int VERTSIZE = 6;
                public static readonly int HORZRES = 8;
                public static readonly int VERTRES = 10;
    
            }
            /// 
            /// 截取部分屏幕
            /// 
            /// 左上角
            /// 右下角
            /// 是否全屏幕
            /// 返回值Bitmap
            public static Bitmap GetPartScreen(Point P1, Point P2, bool Full)
            {
                IntPtr hscrdc, hmemdc;
                IntPtr hbitmap, holdbitmap;
                int nx, ny, nx2, ny2;
                nx = ny = nx2 = ny2 = 0;
                int nwidth, nheight;
                int xscrn, yscrn;
                hscrdc = CreateDC("DISPLAY", null, null, 0);//创建DC句柄
                hmemdc = CreateCompatibleDC(hscrdc);//创建一个内存DC
                xscrn = GetDeviceCaps(hscrdc, GetDeviceCapsIndex.HORZRES);//获取屏幕宽度
                yscrn = GetDeviceCaps(hscrdc, GetDeviceCapsIndex.VERTRES);//获取屏幕高度
                if (Full)//如果是截取整个屏幕
                {
                    nx = 0;
                    ny = 0;
                    nx2 = xscrn;
                    ny2 = yscrn;
                }
                else
                {
                    nx = P1.X;
                    ny = P1.Y;
                    nx2 = P2.X;
                    ny2 = P2.Y;
                    //检查数值合法性
                    if (nx < 0) nx = 0;
                    if (ny < 0) ny = 0;
                    if (nx2 > xscrn) nx2 = xscrn;
                    if (ny2 > yscrn) ny2 = yscrn;
                }
                nwidth = nx2 - nx;//截取范围的宽度
                nheight = ny2 - ny;//截取范围的高度
                hbitmap = CreateCompatibleBitmap(hscrdc, nwidth, nheight);//从内存DC复制到hbitmap句柄
                holdbitmap = SelectObject(hmemdc, hbitmap);
                BitBlt(hmemdc, 0, 0, nwidth, nheight, hscrdc, nx, ny, (UInt32)0xcc0020);
                hbitmap = SelectObject(hmemdc, holdbitmap);
                DeleteDC(hscrdc);//删除用过的对象
                DeleteDC(hmemdc);//删除用过的对象
                return Bitmap.FromHbitmap(hbitmap);//用Bitmap.FromHbitmap从hbitmap返回Bitmap
            }
    
            //所用到的dll声明 
            [DllImport("gdi32.dll")]
            public static extern IntPtr CreateDC(
             string lpszDriver,        // driver name
             string lpszDevice,        // device name
             string lpszOutput,        // not used; should be NULL
             Int64 lpInitData  // optional printer data
             );
    
            [DllImport("gdi32.dll")]
            public static extern IntPtr CreateCompatibleDC(
             IntPtr hdc // handle to DC
             );
    
            [DllImport("gdi32.dll")]
            public static extern int GetDeviceCaps(
             IntPtr hdc,     // handle to DC
             int nIndex   // index of capability
            );
    
            [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 BitBlt(
             IntPtr hdcDest, // handle to destination DC
             int nXDest,  // x-coord of destination upper-left corner
             int nYDest,  // y-coord of destination upper-left corner
             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
             int nYSrc,   // y-coordinate of source upper-left corner
             UInt32 dwRop  // raster operation code
             );
    
            [DllImport("gdi32.dll")]
            public static extern int DeleteDC(
             IntPtr hdc          // handle to DC
             );
    
  • 相关阅读:
    Linux系统下公式编辑器KLatexFormula
    C++11 std::chrono库详解
    Direct Visual-Inertial Odometry with Stereo Cameras
    改变机器人的初始位姿,让机器人的初始位置不在地图的原点处
    ubuntu为文件添加可执行权限
    oracle的启动和停用
    orcale创建用户、授权
    手工配置oracle数据库
    MySQL存储过程详解 mysql 存储过程
    mysql的navicat执行存储过程
  • 原文地址:https://www.cnblogs.com/liang-ling/p/3482108.html
Copyright © 2020-2023  润新知