显存本身是只写的,要想获取的话要用渲染到纹理技术获取,DX11以后有直接函数可以用,DX9要自己写代码.

解决方案 »

  1.   

    http://hi.baidu.com/perfect_winnip/item/6b0cb038562c3185b711db8d=
      

  2.   

    只写的?要获取很麻烦?你说的这个是获取大小吧我是从http://bbs.csdn.net/topics/390143016这个帖子里看到有人说这个方法的
      

  3.   

    写mirror driver。然后把它的图象传输到应用层。
    mirror driver就是虚拟显卡。它会保留一份与你显卡显存中一样的图像。但难度有些大。
    很多远程控制软件(不是木马类),为了提高效率都用的这个。
    源码DDK中用,但用处不一定太大。楼主需要,还是去网上找一找。
      

  4.   

    如果你说的只是一行的话,估计是用BitBlt截屏的,那个的确简单,直接截桌面窗口就可以。但是这个方法对于使用了DirectDraw、Direct3D、OpenGL的程序截掉的是黑色的。因为不同硬件加速方式对应的显存访问方法是不同的,要所有情况想能都兼容,就只有Mirror Driver了。
      

  5.   

    HDC 会有一个Bitmap, Bitmap会对应有块内存, 
    一般机器的显存会映射到内存地址, 桌面的DC会关联这块内存(映射的),如果用代码直接读取这块内存速度一样不会很快, 跟Blt速度差不多, 关键是显卡映射过来的, 与显卡性能很大关系
    mirror 驱动可以自己创建一块物理内存, 物理内存的速度快的多
      

  6.   

    找了几个Demo,怎么全都编译不过去? 路径设了,头文件编译器是都认识了。可还是提示了一大堆错误。谁有编译过了的VC的例子? 或者ddk安装目录下的mirror目录下的那个cxx文件用VC打开之后怎么弄才能编译过去?
      

  7.   

    建议用mirror,速度很快,我用mirror截屏4096*4096,然后ffmpeg h264编码,大约0.2S左右
      

  8.   

    http://blog.csdn.net/zzz3265/article/details/17395643