老问题:独占模式下到底有没有办法拷屏?

ThisFellow 2010-03-10 01:07:21
不是让用户通过设定取消独占模式,而是就是在独占模式下用程序拷屏。
下面这样的代码显然是不行的,我看到N年前就有人问这个,现在有没有人解决这个问题啊?

// create a DC for the screen and create
// a memory DC compatible to screen DC
hScrDC = CreateDC(TEXT("DISPLAY"), NULL, NULL, NULL);
hMemDC = CreateCompatibleDC(hScrDC);
// create a bitmap compatible with the screen DC
hBitmap = CreateCompatibleBitmap(hScrDC, nWidth, nHeight);

// select new bitmap into memory DC
hOldBitmap = (HBITMAP) SelectObject(hMemDC, hBitmap);

// bitblt screen DC to memory DC
BitBlt(hMemDC, 0, 0, nWidth, nHeight, hScrDC, nX, nY, SRCCOPY);

// draw mouse
POINT pt;
GetCursorPos(&pt);
DrawIconEx(hMemDC, pt.x-10, pt.y-10, hCursor, 0, 0, 0, NULL, DI_NORMAL);

// select old bitmap back into memory DC and get handle to
// bitmap of the screen
hBitmap = (HBITMAP) SelectObject(hMemDC, hOldBitmap);

// Copy the bitmap data into the provided BYTE buffer
GetDIBits(hScrDC, hBitmap, 0, nHeight, pData, pHeader, DIB_RGB_COLORS);

// clean up
DeleteDC(hScrDC);
DeleteDC(hMemDC);

// return handle to the bitmap
return hBitmap;
...全文
133 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
ThisFellow 2010-03-19
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20020622/01/822101.html
中提到的
LPDIRECTDRAWSURFACE lpSurface
怎么取得啊?当然,我说的不是本身自己程序的画面。
hrjhrj12345 2010-03-15
  • 打赏
  • 举报
回复
up .
rageliu 2010-03-15
  • 打赏
  • 举报
回复
我的回答是肯定的:可以
ThisFellow 2010-03-13
  • 打赏
  • 举报
回复
ls 说的对,应该是overlay模式吧。
我的问题其实就是不修改WMP的硬件加速模式,而直接截取屏幕的问题。
http://topic.csdn.net/t/20020622/01/822101.html
中的代码可以解决么?
有没有达人愿意帮忙测试一下?
我最近出差,没有环境。
ThisFellow 2010-03-10
  • 打赏
  • 举报
回复
有答案么?帮顶有分。
rageliu 2010-03-10
  • 打赏
  • 举报
回复
怀疑lz问错问题了。

独占模式下是可以截到的。估计lz是要问overlay模式下,这个讨论下还可以
rover___ 2010-03-10
  • 打赏
  • 举报
回复
引用 5 楼 fandh 的回复:
不知道如何解决!可能还没有答案!

不会吧
zhiweikongfu 2010-03-10
  • 打赏
  • 举报
回复
引用 3 楼 thisfellow 的回复:
谢谢关注。
比如你用Windows Media Player播放电影的话,用这个就不能截屏。
你直接用拷屏键也是一样的,电影播放区域考下来是全黑。
除非,你禁用directx,或者修改注册表中的directx配置让他允许拷屏。

那参考这个吧:
http://topic.csdn.net/t/20020622/01/822101.html
fandh 2010-03-10
  • 打赏
  • 举报
回复
不知道如何解决!可能还没有答案!
qq24486838 2010-03-10
  • 打赏
  • 举报
回复
没问题啊,在我这里是好的
ThisFellow 2010-03-10
  • 打赏
  • 举报
回复
谢谢关注。
比如你用Windows Media Player播放电影的话,用这个就不能截屏。
你直接用拷屏键也是一样的,电影播放区域考下来是全黑。
除非,你禁用directx,或者修改注册表中的directx配置让他允许拷屏。



zhiweikongfu 2010-03-10
  • 打赏
  • 举报
回复
我验证了一下,以上的代码没有问题啊,在我这儿好用。
不知道楼主所指的问题在哪里?

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧