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;

        }

       

posted @ 2011-07-25 20:17  晴天娃娃、  阅读(1774)  评论(1编辑  收藏  举报