Изменить разрешение экрана из службы Windows (Windows 7) - PullRequest
2 голосов
/ 28 февраля 2012

(Привет всем. Я очень новичок в программировании для Windows, поэтому заранее прошу прощения, если об этом уже спрашивали, и я просто не знал, что искать, но эта проблема сводила меня с ума, и я знаю, что кто-то может ответить на это очень легко.)

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

Без внушительных знаний о том, как работает Windows-программирование, мне удалось испробовать МИЛЛИОН различных вещей, чтобы заставить его работать, но безрезультатно. Может кто-нибудь ПОЖАЛУЙСТА помочь мне найти то, что мне нужно сделать, чтобы этот код функционировал?

1 Ответ

6 голосов
/ 29 февраля 2012

В Vista и выше сервисы работают в другом сеансе ( сеанс 0 ) и изолированы от интерактивных рабочих столов. Это означает, что код, который вы запускаете из службы, просто не может внести необходимые изменения. Очевидный вывод заключается в том, что вам нужно запускать код на интерактивном рабочем столе.

Теперь вы можете сделать это, но это не совсем легко достичь. Что вам нужно сделать, это организовать для своей службы запуск процесса, который выполняется на интерактивном рабочем столе: Запуск интерактивного процесса из службы Windows в Windows Vista и более поздних версиях . Этот процесс, а не сервис, является тем, что должно внести изменения.

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

...