Снимок экрана из службы Windows - PullRequest
4 голосов
/ 16 июня 2009

У меня есть программное обеспечение для захвата экрана на основе DirectShow. Внутренне он вызывает функцию CopyScreenToBitmap для захвата экрана. Затем изображение сжимается с помощью ffdshow. Он отлично работает как настольное приложение, но как оконная служба, на некоторых компьютерах он не работает (черный рисунок). Я установил «Разрешить сервису взаимодействовать с рабочим столом» и запустил этот сервис для текущей учетной записи пользователя. Есть идеи, что может быть не так?

Я тестирую его на Windows XP, но ожидается, что он будет работать и на Vista, и на 7.

Да, он работает как настольное приложение на всех компьютерах, но на некоторых из них (на большинстве из них) не работает как служба.

Ответы [ 3 ]

3 голосов
/ 16 июня 2009

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

Вот сообщение в блоге с полезной информацией и примерами .

3 голосов
/ 16 июня 2009

Попробуйте это в дополнение к разрешению доступа к рабочему столу:

  1. Перечислить все оконные станции: EnumWindowStations
  2. Найдите станцию ​​окна для вошедшего в систему пользователя и сделайте ее станцией окна вашего процесса: SetProcessWindowStation - см. Пример в этой теме
  3. Затем установите рабочий стол для вашей текущей нити на рабочий стол по умолчанию оконной станции также здесь
  4. Затем получите DC рабочего стола, используя один из нескольких методов, включая

    CreateDC (TEXT ( "DISPLAY"), NULL, NULL, NULL)

    Удачи

0 голосов
/ 16 июня 2009

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

...