2

有一个简单的应用程序可以作为 MS RDP 会话的管理器。您打开到不同计算机的 RDP 会话,然后您可以在通用监控面板中查看它们的预览。

OLE 控件用于组织 RDP 会话。

CWnd::CreateControl(CLSID_MsRdpClient6NotSafeForScripting, ....

以前我只是通过 PrintWindow 复制 RDP 窗口,然后在预览中显示它。

PrintWindow(hWnd, hCompatibleDC,0);

在 Windows 10 中它不起作用。Microsoft Spy++ 显示如下图

Window "Output Painter Window" OPContainerClass
   Window "Output Painter Child Window" OPWindowClass (Invisible)
   Window "Output Painter DX Child Window" OPWindowClass 

在较旧的 Windows 上,“Output Painter 子窗口”主要是可见的,在这种情况下 PrintWindow 有效。

同样在 Windows 10 上,如果我删除 DXGI.dll,RDP 根本不起作用。所以我认为 PrintWindow 不起作用,因为 RDP 使用 DirectX 来绘制窗口内容。

我想过通过 DirectX 函数挂钩来获取图片,但它看起来很荒谬。这是一个很大的开销。我可以完全控制应用程序。我可以访问 RDP OPWindowClass HWND。我什至可以通过 ShowWindow 等来控制它们。

有什么方法可以获取连接到 HWND 的 DirectX 对象(如 IDXGISwapChain1 或 ID2D1HwndRenderTarget)?

4

0 回答 0