desktop duplication是一组WIN8以后才有的桌面截图的协作方案。功能在我看来就是截取桌面屏幕,微软给的示例要命,代码里面老喜欢判断返回值,写个程序贼稳,一来一回代码量就多了,一点不像是示例。再加上里面有各种各样的类、方法和多线程编程。让我一开始拿来的时候是懵笔的,本想直接取里面的函数实现功能而已,发现不是特别好分开,现在终于是搞清楚大概的结构了,本文只讲结构,不讲具体怎么实现的,
其中没加了后缀的是有头文件和源文件两个文件,没加的就只有后缀那个文件。
另外VertexShader.h,PixelShader.h这两个文件虽然没有显示在解决方案里,但是后面还是要用到,里面内容古怪,大概定义了什么结构,并不重要。
一一的说明下吧!
commonType.h定义了整个工程所用的库,头文件,以及必要的对象。
后面四个模块都包括commonType.h,并各自有着功能,后面分析函数在讲有什么功能。
主函数是函数入口,里面包括了注册创建窗体,调用其他类实现功能等。
程序大体思路如下图
这个程序用的directx11的一些东西,本人不了解,所以我也说不清具体细节,值得一说的也就DDProc这个函数,
WORD WINAPI DDProc(_In_ void* Param)
{
// Classes
DISPLAYMANAGER DispMgr;
DUPLICATIONMANAGER DuplMgr;
// D3D objects
ID3D11Texture2D* SharedSurf = nullptr;
IDXGIKeyedMutex* KeyMutex = nullptr;
// Data passed in from thread creation
THREAD_DATA* TData = reinterpret_cast<THREAD_DATA*>(Param);
// Get desktop
DUPL_RETURN Ret;
HDESK CurrentDesktop = nullptr;
CurrentDesk