Программно (впервые!) Включить аэро-тему / композицию рабочего стола - PullRequest
1 голос
/ 29 марта 2011

Я хочу включить композицию рабочего стола на компьютере с Windows 7 программно (предпочтительно C #) и уже пытался сделать это с печально известным DwmEnableComposition P / Invoke.Тем не менее, это не работает, если DWM никогда не был включен (и тест производительности не запускался).Однако я могу включить DWM через панель управления «Персонализация» без запуска теста производительности.

Поэтому мой вопрос: как я могу сделать то же самое программно?И второй вопрос: как я могу добиться того, чтобы изменение в настройке было постоянным (например, если я установил DwmEnableComposition(false) на компьютере, на котором включен DWM, он снова включится после выхода из приложения)?

Ответы [ 2 ]

1 голос
/ 29 марта 2011

Я нашел менее неприятное решение, чем первое: Invoking winsat dwm автоматически включит Aero после его завершения и, если оборудование его поддерживает, и не изменит обои и т. Д.

0 голосов
/ 29 марта 2011

Ответ таков: вы не можете этого сделать.


Microsoft не предоставляет программный способ программам включать или отключать композицию рабочего стола на компьютере пользователя.

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

Поскольку программистам доверяли делать правильные вещи

DwmEnableComposition только для вашего приложения временно отключить DWM, если вы не совместимы с композицией.Он не может использоваться для включения композиции, когда пользователь уже выключил ее.

Любой компьютер, проданный за последние 5 лет, графически способен использовать композицию, и Windows включает егопо умолчанию, если это поддерживается.Единственная причина, по которой он будет отключен:

  • пользователь отключил его
  • другое приложение, которое не поддерживает композицию

Inв любом случае: вы не должны (и поэтому не можете) включить его.

Вы не можете этого сделать.

...