2009-06-16 2 views
4

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

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

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

+0

Какие операционные системы работает на компьютеры, на которых ваш сервис не работает должным образом? –

+0

@bezieur: «Ожидается, что он будет работать»! = «Будет работать», или даже «имеет отдаленный шанс работать». Вы не должны работать с «он должен работать», вы должны проверить его. Модель обслуживания Win32 значительно изменилась в Vista и выше. –

+0

@Mihai: Конечно, вы правы! Я просто имел в виду, что он должен работать на XP на данный момент, но в будущем (коротком) требования будут заключаться в работе над новыми системами ms: -). – bezieur

ответ

3

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

  1. Перечислять все оконные станции: EnumWindowStations
  2. Найти окно станции для вошедшего в систему пользователя и сделать его процесс окна станции: SetProcessWindowStation - см пример in this thread
  3. Затем установите рабочий стол для текущего потока на рабочем столе по умолчанию окна станции also here
  4. Тогда получите D С рабочего стола с помощью одного из нескольких методов, в том числе

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

    Успехов

+0

Вот в чем смысл! Спасибо всем вам за помощь. Кроме того, я нашел статью: http://www.codeproject.com/KB/system/SystemTrayIconInSvc.aspx, которая также охватывает эту проблему. – bezieur

0

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

3

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

Here is a blog post with some useful info and examples.

+0

+1 Джон, вероятно, прав. Я понимаю эту проблему. – ralphtheninja

+0

Это тоже хороший ответ, но он был слишком коротким, чтобы помочь преодолеть мой пробел в знаниях :-). – bezieur

 Смежные вопросы

  • Нет связанных вопросов^_^