2014-07-14 2 views
0

이걸 발견 : https://github.com/steeve/dwmaxx2Windows 8에서 dwm 라이브 축소판 그림을 왜곡/조작하는 방법 또는 다른 방법으로 창 텍스처에 액세스 할 수 있습니까?

이 작동하는 방법이다 : https://www.youtube.com/watch?v=Fpvh16VjrRE

을하지만이 윈도우 8/8.1에서 작동하지 않을 것, 아니면 내가 뭔가 잘못하고 있어요. 그것은로드 된, 그것은 유효한 HWND 렌더링 창에 처리 할 수 ​​있지만 창 질감을 얻을 수 없습니다.

창 텍스처에 액세스하고 큐브와 같은 3D 개체에 매핑 할 수있는 방법이 있습니까?

답변

2

DWM은 문서화되지 않은 개인 DXGI COM 인터페이스를 사용합니다. 액세스 윈도우 텍스처를 얻으려는 동안 개인용 DXGI COM을 연결할 수 있습니다. Win7에 대한

: Win8에 대한

/* 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; 
}; 

:

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; 
}