Какой вызов API я бы использовал для изменения яркости ноутбука (.NET)?

StackOverflow https://stackoverflow.com/questions/373297

  •  22-08-2019
  •  | 
  •  

Вопрос

У меня установлен Windows Server 2008 на ноутбуке Sony, и регулятор яркости не работает.Я бы хотел написать программу, которая позволила бы мне это изменить.

В настоящее время все, что мне нужно сделать, это открыть панель управления питанием, нажать "Дополнительные настройки" и разобраться с таким количеством полей UAC, что любой, кто наблюдает за мной, должен подумать, что я совершенно сумасшедший.

Мне просто нужна простая маленькая программа, чтобы сделать это, но я не знаю, какой API вызывать

Это было полезно?

Решение

Я поднял глаза Джон Рудиссылка на Яркость WmiSetBreghtness в MSDN и придумал это:

ManagementClass mclass = new ManagementClass("WmiMonitorBrightnessMethods");
mclass.Scope = new ManagementScope(@"\\.\root\wmi");
ManagementObjectCollection instances = mclass.GetInstances();

// I assume you get one instance per monitor
foreach(ManagementObject instance in instances)
{
    ulong timeout = 1; // in seconds
    ushort brightness = 50; // in percent
    object[] args = new object[] { timeout, brightness };
    instance.InvokeMethod("WmiSetBrightness", args);
}

Примечание: ManagementClass, ManagementObjectCollection, и ManagementObject все реализуют IDisposable.Ты должен позвонить Dispose() или использовать "using" чтобы избежать утечки ресурсов.

Другие советы

Это только для Vista:

http://msdn.microsoft.com/en-us/library/ms775232.aspx

Вам необходимо идентифицировать монитор с помощью GetPhysicalMonitorsFromHMONITOR, прежде чем устанавливать его яркость с помощью SetMonitorBrightness.Я подозреваю, что никто раньше не делал этого в .net, поэтому вам, вероятно, нужно будет написать свое собственное взаимодействие.API не кажется особенно сложным, так что вы сможете сделать это довольно легко.

Насколько мне известно, для этого не существует управляемых API (.NET).Однако для Vista существуют неуправляемые API, доступные через interop.Смотрите MSDN: API-интерфейсы конфигурации мониторинга и Яркость WmiSetBreghtness.

Могут быть управляемые способы использования метода WmiSetBrightness, но я о них не знаю.

Если вы не используете Vista или Server 2008, вас ждет мир неприятностей:Настройка программного обеспечения должна была бы выполняться непосредственно через драйвер монитора.Основываясь на вашем упоминании UAC выше, я подозреваю, что это не относится к вам, но следующий парень, возможно, захочет знать.:)

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

Чтобы добавить к ответу Дэиглза, http://www.pinvoke.net/ сайт может спасти жизнь при работе с win32-api в .Net.Если этой информации там нет, пожалуйста, добавьте ее после успешного взаимодействия с .Net.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top