为什么 DwmRegisterThumbnail 会失败?
题
我正在尝试捕获子窗口的屏幕并将其渲染在 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。
如果您传递子窗口,则预计会失败。
不隶属于 StackOverflow