这个是 Multiplane overlay
https://learn.microsoft.com/en-us/windows-hardware/drivers/display/multiplane-overlay-support视频播放这块区域,不是程序用 D3D DrawIndexed 直接画在最外层的交换链上,
而是一个单独的交换链区域,相当于子窗口一样,那块区域本质上没有任何像素,IDXGIFactory2::CreateSwapChainForComposition,CreateSwapChainForCoreWindow
如果你 HOOK dwm 截图,开启了 MPO 之后回来这个函数 IDXGISwapChainDWM1::PresentMultiplaneOverlay ,
这里面的 ID3D11Texture2D 也和你说的一样,是没有视频播放区域的,看起来都是黑色的,
除非你的交换链不是 DXGI_SWAP_EFFECT_FLIP_XXX 形式创建的
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Dwm, create DWORD OverlayTestMode with value 00000005.
可以通过修改注册表关闭 MPO 这样就不会出现这种情况
如果你想截图到这些东西,可以 HOOK IDXGISwapChainDWM1::CheckMultiplaneOverlaySupport 直接返回 E_FAIL
这个函数绘制的时候,会实时监测窗口遮挡覆盖之类的东西,是否走 IDXGISwapChainDWM1::PresentDWM 分支
IDXGISwapChainDWM1::PresentDWM 截图出来的图,就是好的,UAC 之类的框也能截到
不管你反截图还是防录播,都可以截图到,以后系统更新好不好使就不知道了