如何在Windows 8中扭曲/操纵dwm live缩略图,或以任何其他方式访问窗口纹理?
我发现: 这就是它的工作原理: 但这在Windows 8/8.1中似乎不起作用,或者我做错了什么。它已加载,获得了要渲染的窗口的有效HWND句柄,但无法获取窗口纹理如何在Windows 8中扭曲/操纵dwm live缩略图,或以任何其他方式访问窗口纹理?,windows,winapi,dwm,Windows,Winapi,Dwm,我发现: 这就是它的工作原理: 但这在Windows 8/8.1中似乎不起作用,或者我做错了什么。它已加载,获得了要渲染的窗口的有效HWND句柄,但无法获取窗口纹理 是否有任何方法可以访问窗口纹理,并能够将其映射到某些3d对象,如立方体?DWM使用未记录的私有DXGI COM接口。当您想要访问windows纹理时,可以钩住私有DXGI COM 对于Win7: /* interface IDXGIFactoryDWM */ static const GUID IID_IDXGIFactoryDWM
是否有任何方法可以访问窗口纹理,并能够将其映射到某些3d对象,如立方体?DWM使用未记录的私有DXGI COM接口。当您想要访问windows纹理时,可以钩住私有DXGI COM 对于Win7:
/* interface IDXGIFactoryDWM */
static const GUID IID_IDXGIFactoryDWM = {0x713F394E,0x92CA,0x47E7
,{0xAB,0x81,0x11,0x59,0xC2,0x79,0x1E,0x54}};
struct IDXGIFactoryDWM: public IUnknown
{
virtual HRESULT STDMETHODCALLTYPE CreateSwapChain(IUnknown *pDevice,
DXGI_SWAP_CHAIN_DESC *pDesc, IDXGIOutput *pOutput,
IDXGISwapChainDWM **ppSwapChain) = 0;
};
/* interface IDXGISwapChainDWM */
static const GUID IID_IDXGISwapChainDWM = {0xF69F223B,0x45D3,0x4AA0,
{0x98,0xC8,0xC4,0x0C,0x2B,0x23,0x10,0x29}};
struct IDXGISwapChainDWM: public IDXGIDeviceSubObject
{
virtual HRESULT STDMETHODCALLTYPE Present(UINT SyncInterval, UINT Flags) = 0;
virtual HRESULT STDMETHODCALLTYPE GetBuffer(UINT Buffer, REFIID riid, void **ppSurface) = 0;
virtual HRESULT STDMETHODCALLTYPE GetDesc(DXGI_SWAP_CHAIN_DESC *pDesc) = 0;
virtual HRESULT STDMETHODCALLTYPE ResizeBuffers(UINT BufferCount, UINT Width, UINT Height, DXGI_FORMAT NewFormat, UINT SwapChainFlags) = 0;
virtual HRESULT STDMETHODCALLTYPE ResizeTarget(const DXGI_MODE_DESC *pNewTargetParameters) = 0;
virtual HRESULT STDMETHODCALLTYPE GetContainingOutput(IDXGIOutput **ppOutput) = 0;
virtual HRESULT STDMETHODCALLTYPE GetFrameStatistics(DXGI_FRAME_STATISTICS *pStats) = 0;
virtual HRESULT STDMETHODCALLTYPE GetLastPresentCount(UINT *pLastPresentCount) = 0;
virtual HRESULT STDMETHODCALLTYPE SetFullscreenState(BOOL Fullscreen, IDXGIOutput *pTarget) = 0;
virtual HRESULT STDMETHODCALLTYPE GetFullscreenState(BOOL *pFullscreen, IDXGIOutput **ppTarget) = 0;
};
对于Win8:
struct __declspec(uuid("{1ddd77aa-9a4a-4cc8-9e55-98c196bafc8f}"))
IDXGIFactoryDWM8 : public IUnknown
{
virtual HRESULT STDMETHODCALLTYPE CreateSwapChainDWM(
/* [annotation][in] */
_In_ IUnknown *pDevice,
/* [annotation][in] */
_In_ DXGI_SWAP_CHAIN_DESC1 *pSwapChainDesc1,
/* [annotation][in] */
_In_ DXGI_SWAP_CHAIN_FULLSCREEN_DESC *pSwapChainFullScreenDesc1,
/* [annotation][in] */
_In_ IDXGIOutput * pOutput,
/* [annotation][out] */
_Out_ IDXGISwapChainDWM8 ** ppSwapChainDWM1
) = 0;
virtual HRESULT STDMETHODCALLTYPE CreateSwapChainDDA(
/* [annotation][in] */
_In_ IUnknown *pDevice,
/* [annotation][in] */
_In_ DXGI_SWAP_CHAIN_DESC1 *pSwapChainDesc1,
/* [annotation][in] */
_In_ IDXGIOutput * pOutput,
/* [annotation][out] */
_Out_ IDXGISwapChainDWM8 ** ppSwapChainDWM8
) = 0;
}
DWM使用未记录的专用DXGI COM接口。当您想要访问windows纹理时,可以钩住私有DXGI COM 对于Win7:
/* interface IDXGIFactoryDWM */
static const GUID IID_IDXGIFactoryDWM = {0x713F394E,0x92CA,0x47E7
,{0xAB,0x81,0x11,0x59,0xC2,0x79,0x1E,0x54}};
struct IDXGIFactoryDWM: public IUnknown
{
virtual HRESULT STDMETHODCALLTYPE CreateSwapChain(IUnknown *pDevice,
DXGI_SWAP_CHAIN_DESC *pDesc, IDXGIOutput *pOutput,
IDXGISwapChainDWM **ppSwapChain) = 0;
};
/* interface IDXGISwapChainDWM */
static const GUID IID_IDXGISwapChainDWM = {0xF69F223B,0x45D3,0x4AA0,
{0x98,0xC8,0xC4,0x0C,0x2B,0x23,0x10,0x29}};
struct IDXGISwapChainDWM: public IDXGIDeviceSubObject
{
virtual HRESULT STDMETHODCALLTYPE Present(UINT SyncInterval, UINT Flags) = 0;
virtual HRESULT STDMETHODCALLTYPE GetBuffer(UINT Buffer, REFIID riid, void **ppSurface) = 0;
virtual HRESULT STDMETHODCALLTYPE GetDesc(DXGI_SWAP_CHAIN_DESC *pDesc) = 0;
virtual HRESULT STDMETHODCALLTYPE ResizeBuffers(UINT BufferCount, UINT Width, UINT Height, DXGI_FORMAT NewFormat, UINT SwapChainFlags) = 0;
virtual HRESULT STDMETHODCALLTYPE ResizeTarget(const DXGI_MODE_DESC *pNewTargetParameters) = 0;
virtual HRESULT STDMETHODCALLTYPE GetContainingOutput(IDXGIOutput **ppOutput) = 0;
virtual HRESULT STDMETHODCALLTYPE GetFrameStatistics(DXGI_FRAME_STATISTICS *pStats) = 0;
virtual HRESULT STDMETHODCALLTYPE GetLastPresentCount(UINT *pLastPresentCount) = 0;
virtual HRESULT STDMETHODCALLTYPE SetFullscreenState(BOOL Fullscreen, IDXGIOutput *pTarget) = 0;
virtual HRESULT STDMETHODCALLTYPE GetFullscreenState(BOOL *pFullscreen, IDXGIOutput **ppTarget) = 0;
};
对于Win8:
struct __declspec(uuid("{1ddd77aa-9a4a-4cc8-9e55-98c196bafc8f}"))
IDXGIFactoryDWM8 : public IUnknown
{
virtual HRESULT STDMETHODCALLTYPE CreateSwapChainDWM(
/* [annotation][in] */
_In_ IUnknown *pDevice,
/* [annotation][in] */
_In_ DXGI_SWAP_CHAIN_DESC1 *pSwapChainDesc1,
/* [annotation][in] */
_In_ DXGI_SWAP_CHAIN_FULLSCREEN_DESC *pSwapChainFullScreenDesc1,
/* [annotation][in] */
_In_ IDXGIOutput * pOutput,
/* [annotation][out] */
_Out_ IDXGISwapChainDWM8 ** ppSwapChainDWM1
) = 0;
virtual HRESULT STDMETHODCALLTYPE CreateSwapChainDDA(
/* [annotation][in] */
_In_ IUnknown *pDevice,
/* [annotation][in] */
_In_ DXGI_SWAP_CHAIN_DESC1 *pSwapChainDesc1,
/* [annotation][in] */
_In_ IDXGIOutput * pOutput,
/* [annotation][out] */
_Out_ IDXGISwapChainDWM8 ** ppSwapChainDWM8
) = 0;
}