为什么DwmRegisterThumbnail会失败?

时间:2010-01-27 18:24:55

标签: windows winapi dwm

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

HTHUMBNAIL thumbnail = NULL;
HRESULT hr = S_OK;
hr = DwmRegisterThumbnail( hWnd, visualHwnd, &thumbnail );

if( SUCCEEDED( hr ) )
{
    ...
}

这一直都失败了。 visualHwnd是子窗口,hWnd是父窗口。我也尝试过它没有父子关系,它只是没有绘制任何东西,很好地预期,因为如果语句失败。

可能是什么原因?

以下是我创建父母的方式:

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

1 个答案:

答案 0 :(得分:2)

来自MSDN:

  • hwndDestination

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

  • hwndSource

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

如果您传递子窗口,则预计会失败。