2009-09-11 2 views
2

Я готов передать функции захвата экрана нашим приложением, потому что это не наш основной бизнес, и я потратил слишком много времени, пытаясь заставить наш код делать все, что мне нужно. Время для специалиста, я думаю. Мои требования, в порядке уменьшения важности, ниже. Кто-нибудь имеет опыт работы с любыми коммерческими или бесплатными библиотеками, отвечающими большинству или всем этим требованиям?Какие библиотеки экрана для экрана Windows (C++) соответствуют моим требованиям?

  1. Должен работать в Windows XP и выше. (Но не Win95/98/Me.)

  2. Visual C++ 2005 совместимый, где снимок экрана может быть запущен из моего кода. Предпочтительно статическая библиотека, но DLL или COM-объект в порядке. Я бы предпочел не распространяться на автономный EXE, потому что есть некоторые пользователи, которые попытаются вмешаться в наше приложение, и я думаю, что наличие отдельного снимка экрана EXE делает это слишком простым.

  3. Должно быть в состоянии сделать скриншоты из нескольких систем мониторов. (Предпочтительно, как клавиша «Экран печати» делает в Windows, создавая растровое изображение дисплеев, сшитых вместе, но если мне нужно сделать снимки отдельно и объединить их, то это приемлемо.)

  4. Должно быть в состоянии захватить экран правильно, когда клиент удаленного рабочего стола (или любой клиент RDP или виртуальная машина) находится в полноэкранном режиме. (Конечно, он также должен работать, когда RDP находится в оконном режиме, но это не должно быть проблемой, если оно не работает, имитируя нажатие клавиши, которое может быть передано на удаленную ОС, вместо того, чтобы обрабатываться локально.)

  5. Должен быть способен правильно отображать экран, когда проигрыватель Windows Media (или любой другой медиаплеер) находится в полноэкранном режиме.

  6. Должен быть способен правильно отображать экран, когда игра (например, World of Warcraft) находится в полноэкранном режиме.

  7. Было бы неплохо иметь возможность захватить несколько секунд активности пользователя в качестве видео.

+0

Я не думаю, что stackoverflow действительно должен быть доской. – Chad

+1

Я не понимаю комментария Чада. Я прошу совета по правильному программному инструменту для конкретной задачи - это кажется мне совершенно по-разному. – jeffm

ответ

0

Некоторые люди в нашем офисе используют Magick ++ (библиотека ImageMagick) для создания скриншотов. Я не знаю всех спецификаций, но вы можете взглянуть на него и посмотреть, соответствует ли он вашим требованиям.

Надеюсь, это поможет.

С уважением,

Sebastiaan

+0

В этой библиотеке есть функция захвата экрана, но из документации не ясно, имеет ли она что-то большее, чем базовые функции. Если я не могу найти что-то более конкретное для этой задачи, я дам ему попытку. – jeffm

1

Я не знаю, библиотеки, которая будет делать то, что вы хотите.

Если бы мне пришлось закодировать ваши требования, я бы, вероятно, использовал исходный код сервера TightVNC в качестве отправной точки. Я думаю, что у него есть технология, чтобы делать все в вашем списке EXCEPT ....

Я не уверен, что технически есть НИЧЕГО, что может сделать захват экрана на чей-то сеанс удаленного рабочего стола. Подумайте об этом: может быть несколько сеансов удаленного рабочего стола (процесс csrss.exe) с использованием одного и того же физического удаленного настольного сервера. Если бы вы сидели перед машиной, смотрящей на видеомонитор, вы бы ничего не увидели. Так что вы можете ожидать. VNC только собирается захватить то, что происходит с «настоящим» видео (не-remote csrss.exe).

+0

Точка. Я только пытаюсь увидеть, что клиент удаленного рабочего стола отображает для пользователя, что является проблемой только в полноэкранном режиме. – jeffm

+0

Вы говорите, что * УЖЕ * есть способ запускать программное обеспечение на удаленном настольном сервере, которое может записывать то, что видит данный клиент удаленного рабочего стола Windows? –

+0

Я не хочу запускать что-либо на RDP-сервере (и не мог даже, если бы захотел по различным юридическим и логическим причинам.) Я просто ищу что-то, что программно делает то, что делает ключ «Print Screen», надеюсь, с дополнительными предметами в моем списке пожеланий. (Я в настоящее время имитирую нажатие клавиши «Печать экрана», но это ненадежно и не работает в полноэкранном режиме.) – jeffm

1

я не знаю, если это действительно помогает, но лучшие библиотеки изображений доступны доступны из

www.accusoft.com и

www.leadtools.com

И поддержка creatting скриншоты, хотя я не знаю, если он будет правильно захватить вывод видеопроигрывателя, который отображает графическое ускорение или запись фильмов с экрана.

+0

Спасибо. Я проверю accusoft, но я поговорил с LEADTOOLS, и они пока не поддерживают несколько мониторов. (Некоторые из более высоких номеров в моем списке пожеланий, без которых я мог бы жить, но это один разбойник.) – jeffm

0

Если бы я был вами, я бы исследовал WindowsClippings, довольно зрелое и расширяемое приложение, написанное на C++, которое делает именно то, что вам нужно. У него есть API, который вы можете расширить по своим требованиям и довольно дешево в 18 $

+0

Я фактически использую WindowClippings самостоятельно, но поскольку это отдельное приложение, которое мы должны заплатить, чтобы лицензировать и распространять его, Думаю, мой босс пойдет. – jeffm