PrintWindow работает в автономном приложении и частично работает в плагине NPAPI - PullRequest
1 голос
/ 16 декабря 2011

У меня есть код, который захватывает данное окно с помощью функции PrintWindow.В частности, я делаю захват веб-страниц в браузере.Этот код протестирован в автономном приложении Windows и работает нормально.Этот же код встроен в плагин NPAPI и загружен в Google Chrome.Там проблемы случаются.Если в Chrome есть только одна вкладка, код работает нормально.Если Chrome имеет 2 вкладки, код возвращает черный ящик ожидаемого размера.Я протестировал отдельное приложение и плагин в одно и то же время на одной и той же ручке окна (Chrome_RenderWidgetHostHWND).Приложение ВСЕГДА работает, плагин ВСЕГДА терпит неудачу, если в браузере открыто несколько вкладок.

Буду очень признателен, если кто-нибудь подскажет, как это исправить..

Примечание.Другие методы захвата окон неприменимы из-за еще больших недостатков моего сценария использования.

1 Ответ

0 голосов
/ 17 декабря 2011

Бьюсь об заклад, у вас проблемы с песочницей.

Вероятно, ваше приложение работает на "нормальном" уровне целостности, поэтому у него нет проблем с отправкой сообщений WM_PRINT или WM_PRINTCLIENT в Chromeпроцесс.(PrintWindow использует эти сообщения под прикрытиями.)

Когда вы подключаете плагин в Chrome, я считаю, что ваш код работает как процесс с "низкой" целостностью (что снижает шансы таких вещей, как атаки с разбивкой),Поэтому меня не удивляет, что отправка сообщения в окно в другом процессе не удалась.

К сожалению, это не объясняет, почему это работает, когда в Chrome есть только одна вкладка.Вы находите один и тот же экземпляр Chrome_RenderWidgetHostHWND как в приложении, так и в плагине, если у вас открыто несколько вкладок?В общем, есть одно из этих окон на вкладку.Как ты находишь окно?

...