Я хочу закодировать (в C #) инструмент для добавления / изменения / удаления некоторых из доступных конфигураций отображения Windows (ширина, высота и частота обновления).
Можно ли это сделать программно? Я потратил много часов, пытаясь найти что-то об этом в Интернете, но мне не повезло.
Причина, по которой я этого хочу, заключается в том, что некоторые старые полноэкранные игры постоянно устанавливают частоту обновления до 60 Гц по сравнению с тем, что было при запуске игры (в моем случае - 120 Гц). Я могу решить эту проблему дважды, используя Alt-Tab, но вместо этого я хочу просто ограничить доступные конфигурации дисплея (или изменить частоту обновления для некоторых из них).
Прежде чем рассмотреть все это, я попытался решить мою проблему с помощью следующих попыток:
Перехват клавиатуры (с использованием этого класса Глобальный захват клавиатуры в приложении C # ), а затем попытка принудительного изменения отображения при нажатии горячей клавиши. Он отлично работает практически для всех обычных приложений. Но когда запускается полноэкранная игра, событие keydown не срабатывает. Либо это невозможно, когда игра в полноэкранном режиме имеет фокус, либо я не просто знаю, как это сделать правильно (весьма вероятно, поскольку я новичок в этом отношении).
Попытка использования таймера для периодической проверки определенного разрешения и, если обнаружена частота 60 Гц, попробуйте установить его на 120 Гц. Таймер срабатывает, и код пытается сменить монитор (который кратковременно мигает), но частота обновления не меняется.
Другая идея, которая у меня возникла, состояла в том, чтобы использовать Mhook или Detours для перехвата вызова «изменить настройки дисплея». Но я не знаю, сработает ли это. И у меня также нет опыта работы с C ++. Поэтому я действительно не хочу идти по этому пути, если смогу избежать этого.