god is girl
上帝啊
oh my god

解决方案 »

  1.   

    句柄用int就ok了
    女的 男的 都告诉
      

  2.   

    我不懂这个
    /// 
    /// 截取部分屏幕
    /// 
    ///左上角
    ///右下角
    ///是否全屏幕
    /// 返回值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
    }   所用到的API声明:[DllImport("gdi32.dll")]
    public static extern IntPtr CreateDC(
     string lpszDriver,        // driver name
     string lpszDevice,        // device name
     string lpszOutput,        // not used; should be NULL
     UInt32 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
     GetDeviceCapsIndex 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
     );/// <summary>
      /// GetDeviceCaps使用的枚举
      /// </summary>
      [Flags()]
      public enum GetDeviceCapsIndex
      {
       /// <summary>
       /// 设备的版本
       /// </summary>
       DRIVERVERSION=0,
       TECHNOLOGY=2,
       HORZSIZE=4,
       VERTSIZE=6,
       /// <summary>
       /// 屏幕宽度
       /// </summary>
       HORZRES=8,
       /// <summary>
       /// 屏幕高度
       /// </summary>
       VERTRES=10,
       LOGPIXELSX=88,
       LOGPIXELSY=90,
       BITSPIXEL=12,
       PLANES=14,
       NUMBRUSHES=16,
       NUMPENS=18,
       NUMFONTS=22,
       NUMCOLORS=24,
       ASPECTX=40,
       ASPECTY=42,
       ASPECTXY=44,
       PDEVICESIZE=26,
       CLIPCAPS=36,
       SIZEPALETTE=104,
       NUMRESERVED=106,
       COLORRES=108,
       /// <summary>
       /// 设备宽度???
       /// </summary>
       PHYSICALWIDTH=110,
       /// <summary>
       /// 设备高度???
       /// </summary>
       PHYSICALHEIGHT=111,
       PHYSICALOFFSETX=112,
       PHYSICALOFFSETY=113,
       VREFRESH=116,
       SCALINGFACTORX=114,
       SCALINGFACTORY=115,
       BLTALIGNMENT=119,
      }
      

  3.   

    欢迎像 zhchg6666 这样的师兄进入 谢谢
      

  4.   

    谢谢 Koning 学长,可是这个我没太看懂,好长的一段代码,没发现有地方是定义 HBITMAP 的呵呵
      

  5.   

    我在vc里是这样定义的 HBITMAP hbitmap;然后使用GetObject(hbitmap, sizeof(bmap), &bmap);我想问,在C#中怎样写才可以使用 GetObject 这个方法?