Есть простое приложение, которое работает как менеджер сеансов MS RDP. Вы открываете сеансы RDP на разных компьютерах, а затем вы можете видеть их предварительные просмотры в общей панели мониторинга.
Элемент управления OLE используется для организации сеанса RDP.
CWnd::CreateControl(CLSID_MsRdpClient6NotSafeForScripting, ....
Ранее я просто скопировал окно RDP через PrintWindow, а затем показал его в окне предварительного просмотра.
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 Child Window» в основном виден, и в этом случае работает PrintWindow.
Также в Windows 10 RDP вообще не работает, если я удаляю DXGI.dll. Поэтому я считаю, что PrintWindow не работает, потому что RDP использует DirectX для рисования содержимого окна.
Я думал о перехвате функции DirectX, чтобы получить картину, но это выглядит нелепо. Это большие накладные расходы. Я могу полностью контролировать приложение. Я могу получить доступ к HWND RDP OPWindowClass. Я даже могу управлять ими через ShowWindow и т. Д.
Есть ли способ получить объекты DirectX (например, IDXGISwapChain1 или ID2D1HwndRenderTarget), которые подключены к HWND?
Задача ещё не решена.
Других решений пока нет …