为什么DwmRegisterThumbnail可能会失败?

我正在尝试捕获子窗口的屏幕,并在Windows 7中的父级表面上呈现它。

HTHUMBNAIL thumbnail = NULL; HRESULT hr = S_OK; hr = DwmRegisterThumbnail( hWnd, visualHwnd, &thumbnail ); if( SUCCEEDED( hr ) ) { ... } 

这总是失败。 visualHwnd是子窗口,hWnd是父窗口。 我也尝试了没有亲子关系,它只是没有画任何东西,预计好,因为如果陈述失败。

可能是什么原因?

以下是我如何创build父级:

 hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); 

而小孩:

 CreateProcessA( NULL, "PVFOX.exe \"view3.pv\" ", NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &si, &piVisual); WaitForInputIdle( piVisual.hProcess, INFINITE ); Sleep( 3000 ); EnumWindows(EnumWindowsProc, 0); SetParent(visualHwnd, hWnd); 

来自MSDN:

  • hwndDestination

    将使用DWM缩略图的窗口的句柄。 将目标窗口句柄设置为除顶级窗口类型以外的任何其他内容都将导致E_INVALIDARG。

  • hwndSource

    窗口句柄作为缩略图源。 将源窗口句柄设置为除顶层窗口类型之外的任何内容都将导致E_INVALIDARG。

如果你通过一个子窗口,这可能会失败。