我正在尝试捕获子窗口的屏幕并将其渲染在 Windows 7 的父表面上。

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

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

这总是失败。VisualHwnd 是子窗口,hWnd 是父窗口。我也在没有父子关系的情况下尝试过,它只是没有绘制任何东西,这是预料之中的,因为 if 语句失败。

可能是什么原因?

这是我创建父级的方法:

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:

  • 硬件目的地

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

  • 硬件源

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top