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

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

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

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

Ответы [ 5 ]

9 голосов
/ 28 апреля 2009

Я посмотрел Ссылка Джона Руди на WmiSetBrightness в 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", чтобы избежать утечки ресурсов.

2 голосов
/ 17 декабря 2008

Это только перспектива:

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

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

1 голос
/ 17 декабря 2008

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

1 голос
/ 17 декабря 2008

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

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

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

0 голосов
/ 17 декабря 2008

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

...