Попытка управления гаммой монитора с помощью C# с использованием DLLImport для запуска SetDeviceGammaRamp в gdi32.dll. Аналогично ответу на этот вопрос, который аналогично управляет яркостью: SetDeviceGammaRamp просто мигает экраном .
Проблема в том, что SetDeviceGammaRamp никогда не работает на моей основной рабочей станции, на которой установлена видеокарта Nvidia GTX 1070 и 3 монитора прилагается к нему. Он всегда возвращает false, первоначально с ошибкой «Слишком много постов было сделано на семафор». После этой ошибки он продолжает возвращать false и не работает, но с кодом ошибки 0 («Операция успешно завершена») , Это приложение Windows Forms, если это имеет значение. Я также попробовал консольную версию, и она также, но не удалась, но не с ошибкой семафора, просто с ошибкой «успешно завершено».
Интересно, что если я запускаю точно такое же приложение на P C без видеокарты и только с одного монитора код работает! Однако после многократного запуска функции она в конечном итоге перестанет работать с одной и той же ошибкой семафора на этом компьютере, пока приложение не будет перезапущено, но, по крайней мере, я знаю, что SetDeviceGammaRamp может по-прежнему работать.
Я совершенно не знаю, как устранить ошибку или почему она вообще не работает на моей основной рабочей станции. Это потому, что у меня есть видеокарта, и я не использую встроенную графику? Это потому что у меня несколько мониторов? Я пытался указать, что указанный c монитор D C использует код, подобный этому ( Как изменить гамма-диаграмму монитора с одним дисплеем (NVidia Config)? ), но результаты на моей основной рабочей станции всегда одинаковы.
Последнее замечание - оно также работает только при компиляции. Если запустить приложение через Visual Studio (отладка или выпуск), произойдет сбой с другой ошибкой «Загрузчику ресурсов не удалось найти файл MUI», но, возможно, это может быть нормально при доступе к системным DLL таким образом?