• C# 获取桌面


                  

     [System.Runtime.InteropServices.DllImport(”gdi32.dll”)]
    
            public static extern int BitBlt(IntPtr hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, UInt32 dwRop);
    
          //创建桌面句柄
    
            [System.Runtime.InteropServices.DllImportAttribute(”gdi32.dll”)]
    
            public static extern IntPtr CreateDC(string lpszDriver, string lpszDevice, string lpszOutput, int lpInitData);
    
            [System.Runtime.InteropServices.DllImport(”gdi32.dll”)]
    
            public static extern IntPtr CreateCompatibleDC(IntPtr hdc);
    
            //转换为本地的图像资源
    
            [System.Runtime.InteropServices.DllImport(”gdi32.dll”)]
    
            public static extern IntPtr CreateCompatibleBitmap(IntPtr hdc, int nWidth, int nHeight);
    
            [System.Runtime.InteropServices.DllImport(”gdi32.dll”)]
    
            public static extern IntPtr SelectObject(IntPtr hdc, IntPtr hgdiobj);
    
            [System.Runtime.InteropServices.DllImport(”gdi32.dll”)]
    
            public static extern int DeleteDC(IntPtr hdc);
    
            //释放用过的设备句柄
    
            [DllImport(”user32.dll”)]
    
            public static extern bool ReleaseDC(
    
             IntPtr hwnd, IntPtr hdc
    
             );
    
            //释放用过的画笔等资源
    
            [DllImport(”gdi32.dll”)]
    
            public static extern bool DeleteObject(
    
              IntPtr hdc
    
             );
    
            
    
    /// <summary>
    
            /// 截取屏幕图像
    
            /// </summary>
    
            /// <param name=”Width”>宽</param>
    
            /// <param name=”Height”>高</param>
    
            /// <param name=”x”>x坐标(全屏时候为0)</param>
    
            /// <param name=”y”>y坐标(全屏时候为0)</param>
    
            /// <returns></returns>
    
            public Bitmap fullphoto(int Width,int Height,int x,int y)
    
            {
    
                Bitmap bitmap;
    
                //try
    
                //{
    
                    IntPtr hScreenDc = CreateDC(”DISPLAY”, null, null, 0); // 创建桌面句柄
    
                    IntPtr hMemDc = CreateCompatibleDC(hScreenDc); // 创建与桌面句柄相关连的内存DC
    
                    IntPtr hBitmap = CreateCompatibleBitmap(hScreenDc, Width, Height);   
    
                    IntPtr hOldBitmap = SelectObject(hMemDc, hBitmap);
    
                    BitBlt(hMemDc, x, y, Width, Height, hScreenDc, x, y, (UInt32)0xcc0020);
    
                    IntPtr map = SelectObject(hMemDc, hOldBitmap);
    
                    bitmap = Bitmap.FromHbitmap(map);  
    
                    ReleaseDC(hBitmap, hScreenDc);
    
                    DeleteDC(hScreenDc);//删除用过的对象
    
                    DeleteDC(hMemDc);//删除用过的对象
    
                    DeleteDC(hOldBitmap);
    
                    DeleteObject(hBitmap);
    
                   
    
                  
    
                //}
    
                //catch (Exception wx)
    
                //{
    
                //    return null;
    
                    //}
    
                    // number= number +1;
    
                    // bitmap.Save(”screen” + number + “.bmp”);
    
                
    
                return bitmap;
    
            }
    

           

  • 相关阅读:
    如何自己手写一个热加载(转)
    阻塞I/O、非阻塞I/O和I/O多路复用、怎样理解阻塞非阻塞与同步异步的区别?
    Java NIO浅析 转至 美团技术团队
    mysql在线修改表结构大数据表的风险与解决办法归纳(转)
    MySQL性能优化
    Tomcat Connector(BIO, NIO, APR)三种运行模式(转)
    redis 单线程的理解
    Spring 中的bean 是线程安全的吗?
    Spring 自定义注解,结合AOP,配置简单日志注解 (转)
    redis 分布式锁
  • 原文地址:https://www.cnblogs.com/DotNetCSharp/p/2116574.html
Copyright © 2020-2023  润新知