如何获取桌面图像 我想用VC实现实时获取桌面图像,类似Quick Screen Recorder 的功能。应该怎样办呢?希望高手提点一下!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1 CreateDC并给第一个参数传入字符串"DISPLAY"创建一个桌面DC2 CreateCompatibleDC在内存中创建一个和桌面DC关联的DC3 CreateCompatibleBitmap创建一个和桌面DC相关联的BITMAP对象,并获得句柄4 从BITMAP句柄中获得相关信息,构造位图 GetDC不包括下面的任务栏的, 不知道怎么可以得到整个屏幕 包括任务栏 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;} 我有这方面的vc源码,涉及到用动态jpeg压缩方法在服务端处理数据,然后通过缓存数据流传输数据,c/s 结构,两端程序,有兴趣就跟我联系。qq 149431298你也可以看页面http://auction1.taobao.com/auction/0/item_detail-0db1-4a08b41441d8c9cb1e8de30d1b65cce2.jhtml里面有详细的功能说明。 高分请教 : 一个关于ShellExecute的问题! 搞定后立即结帖! 关于ADO的问题 有哪些关于Windows编程方面的经典好书 有ASP做P2P的Server端,可以减低开发难度吗? 在MFC中能不能动态的消息映射呀? 求:好的解决方法!!!分数不够可以加!(加密方面的) 本周最后一个问题,高分。如何从HICON里取得dib信息 控件=组件?有何区别?答者有分 vc 老是报读取位置 0xFFFFFFFC 时发生访问冲突。 我要实时监控某一应用程序运行状态正常和不正常,有那几种方式和用到那些api呢? 【求助】子类化消息问题 基于VC 的远程控制代码
2 CreateCompatibleDC在内存中创建一个和桌面DC关联的DC
3 CreateCompatibleBitmap创建一个和桌面DC相关联的BITMAP对象,并获得句柄
4 从BITMAP句柄中获得相关信息,构造位图
{
// 屏幕和内存设备描述表
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;}