我想用VC实现实时获取桌面图像,类似Quick Screen Recorder 的功能。应该怎样办呢?
希望高手提点一下!!!

解决方案 »

  1.   

    1 CreateDC并给第一个参数传入字符串"DISPLAY"创建一个桌面DC
    2 CreateCompatibleDC在内存中创建一个和桌面DC关联的DC
    3 CreateCompatibleBitmap创建一个和桌面DC相关联的BITMAP对象,并获得句柄
    4 从BITMAP句柄中获得相关信息,构造位图
      

  2.   

    GetDC不包括下面的任务栏的, 不知道怎么可以得到整个屏幕 包括任务栏
      

  3.   

    HBITMAP CopyScreenToBitmap(LPRECT lpRect)
    {

    // 屏幕和内存设备描述表
    HDC   hScrDC=0, hMemDC;       // 位图句柄
    HBITMAP    hBitmap, hOldBitmap;    // 选定区域坐标
    int   nX, nY, nX2, nY2;       // 位图宽度和高度
    int       nWidth, nHeight;       // 屏幕分辨率
    int       xScrn, yScrn;         
    // 确保选定区域不为空矩形
    // if (IsRectEmpty(lpRect))
    // return NULL; //为屏幕创建设备描述表
    hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL); int ok=1;
    if(hScrDC==NULL) ok=0; //为屏幕设备描述表创建兼容的内存设备描述表
    hMemDC = CreateCompatibleDC(hScrDC); // 获得选定区域坐标
    nX = lpRect->left;
    nY = lpRect->top;
    nX2 = lpRect->right;
    nY2 = lpRect->bottom; // 获得屏幕分辨率
    xScrn = GetDeviceCaps(hScrDC, HORZRES);
    yScrn = GetDeviceCaps(hScrDC, VERTRES); //确保选定区域是可见的
    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); // 把新位图选到内存设备描述表中
    hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap); // 把屏幕设备描述表拷贝到内存设备描述表中
    BitBlt(hMemDC, 0, 0, nWidth, nHeight,hScrDC, nX, nY, SRCCOPY); //得到屏幕位图的句柄
    hBitmap =(HBITMAP)SelectObject(hMemDC, hOldBitmap); //清除 
    DeleteDC(hScrDC);
    DeleteDC(hMemDC); // 返回位图句柄
    return hBitmap;}
      

  4.   

    我有这方面的vc源码,涉及到用动态jpeg压缩方法在服务端处理数据,然后通过缓存数据流传输数据,c/s 结构,两端程序,有兴趣就跟我联系。qq 149431298你也可以看页面http://auction1.taobao.com/auction/0/item_detail-0db1-4a08b41441d8c9cb1e8de30d1b65cce2.jhtml里面有详细的功能说明。