Фон:
У меня есть требование создать эффект затемнения на другом мониторе. Думаю, я решил это, используя окно WPF, которое обрабатывает все размеры экрана с помощью Topmost
и AllowsTransparency
= True. Он обладает внутренним эффектом черного свечения и к нему применяется стиль WS_EX_TRANSPARENT | WS_EX_TOOLWINDOW
(среди прочего), чтобы пользователи могли перейти к приложениям, расположенным за ним.
Я отслеживаю события EVENT_OBJECT_REORDER
в Windows и вызываю SetWindowPos
, чтобы заставить верхнее состояние выше других верхних окон. Кажется, что это хорошо работает до сих пор в моем доказательстве тестирования концепции.
Проблема, которую я обнаружил, заключалась в том, что это затемнение (окно) будет охватывать панель задач, но не если я нажму кнопку "Пуск" . В настоящее время я тестирую Windows 10. Если я нажму кнопку "Пуск" , это приведет к появлению меню "Пуск" и "Панель задач" над окном. Я хотел, чтобы все оставалось тусклым, всегда.
Я решил эту проблему, установив uiAccess
= true в манифест приложения, создав самозаверяющий сертификат и скопировав exe на "c:\program files *". Это позволяет мне форсировать самое верхнее состояние для моего окна, даже над меню "Пуск" .
Мои вопросы:
-
Есть ли способ разместить окно над меню "Пуск" без
uiAccess
? Или даже другой способ принудительно уменьшить яркость экрана без использования окна (но не зависит от драйверов монитора или аппаратных возможностей)? -
Если нет, то какие соображения мне следует иметь в виду при распространении WPF-приложения (через проект настройки WiX или что-то подобное), который должен обходить ограничения UIPI с помощью
uiAccess
= True? Могу ли я просто установить свой собственный сертификат в процессе установки? Будет ли пользователь сталкиваться с любыми дополнительными препятствиями? Будет ли я, как разработчик, сталкиваться с любыми дополнительными препятствиями при его создании (помимо того, что я уже упоминал)?
Спасибо!