2015-07-14 7 views
1

У нас есть проблема с функцией PrintWindow в Windows 10 (сборка 10166). Когда мы вызываем PrintWindow (https://msdn.microsoft.com/ru-ru/library/windows/desktop/dd162869(v=vs.85).aspx) для захвата изображения окна браузера Microsoft Edge (Project Spartan), мы получаем черное изображение.PrintWindow и Microsoft Edge

Кто-нибудь знает причину этого и как его можно устранить/избежать? Или, может быть, какой-то другой способ захватить изображение окна, которое может быть в фоновом режиме и скрыто за другими окнами?

UPDATE: Мы пытались посылать WM_PRINTCLIENT и WM_PRINT сообщения и вызова DefWindowProc с WM_PRINT, но результат тот же - только черное изображение. Мы также пытались использовать BitBlt для копирования окна DC на поверхность памяти, но он тоже не работает. Лучшее решение, которое мы имеем сейчас, - это вывести окно браузера на передний план, захватить весь экран и обрезать снимок экрана до размера клиента окна; но он может прерывать и раздражать пользователей из-за переключения приложения, которое в настоящее время используется.

+1

Вполне вероятно, что это просто невозможно –

+0

Вот некоторые другие случаи, когда PrintWindow не работает https://social.msdn.microsoft.com/forums/windows/en- us/d9a188ae-3503-4c31-aa00-6e7195b5384a/printwindow-bugs – demonplus

+0

'WM_PRINTCLIENT' должен поддерживаться данным окном (несмотря на слухи об обратном, Windows не входит и не делает WM_PAINT в растровое изображение в крайнем случае) –

ответ

0

Если вы хотите сделать снимок экрана на странице браузера. попробуйте эту библиотеку JavaScript: http://html2canvas.hertzen.com/ Скрипт проходит через DOM страницы, на которую он загружен. Он собирает информацию обо всех элементах, которые затем используются для построения представления страницы. Другими словами, на самом деле он не снимает скриншот страницы, а создает его представление на основе свойств, которые он читает из DOM.

Я только что попробовал на своей машине на Microsoft Edge и Chrome и работал над обоими. Упование, которое выполняет эту работу!

0

У меня была такая же проблема с IE try this. Наиболее стабильный результат был с двойным вызовом

PrintWindow(hWnd, hdcScreen, 0); 
PrintWindow(hWnd, hdcScreen, PW_CLIENTONLY);