2013-08-06 3 views
3

Как работает GetMonitorBrightness http://msdn.microsoft.com/en-us/library/ms775205.aspx? Может ли кто-нибудь дать мне фактическую рабочую реализацию, вызывающую этот код на C#?Как запросить GetMonitorBrightness от C#

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

У меня есть следующий рабочий код, который устанавливает яркость от 1 до ~ 150. Но я ищу допустимые входные значения (минимальные значения).

static void SetBrightness(byte targetBrightness) 
    { 
     ManagementScope scope = new ManagementScope("root\\WMI"); 
     SelectQuery query = new SelectQuery("WmiMonitorBrightnessMethods"); 
     using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query)) 
     { 
      using (ManagementObjectCollection objectCollection = searcher.Get()) 
      { 
       foreach (ManagementObject mObj in objectCollection) 
       { 
        mObj.InvokeMethod("WmiSetBrightness", 
         new Object[] { UInt32.MaxValue, targetBrightness }); 
        break; 
       } 
      } 
     } 
    } 

ответ

3

При использовании Interop должно быть возможно, эта функция также доступна через WMI. Изменение мой исходный код немного привел в следующем коде, который должен работать:

ManagementScope scope; 
SelectQuery query; 

scope = new ManagementScope("root\\WMI"); 
query = new SelectQuery("SELECT * FROM WmiMonitorBrightness"); 

using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query)) 
{ 
    using (ManagementObjectCollection objectCollection = searcher.Get()) 
    { 
     foreach (ManagementObject mObj in objectCollection) 
     { 
     Console.WriteLine(mObj.ClassPath); 
     foreach (var item in mObj.Properties) 
     { 
      Console.WriteLine(item.Name + " " +item.Value.ToString()); 
      if(item.Name =="CurrentBrightness") 
      //Do something with CurrentBrightness 
     } 
     } 
    } 
    } 

Теперь мне действительно любопытно, как обращаться с «специальные» случаи, как не ноутбук экрана, и если они осуществляют каким-либо образом влиять на яркость.

1

Функция имеет выход минимальных и максимальных значений:

LPDWORD pdwMinimumBrightness=NULL; 
LPDWORD pdwMaximumBrightness=NULL; 
HANDLE pmh = pPhysicalMonitors[0].hPhysicalMonitor; 
GetMonitorBrightness(pmh, pdwMinimumBrightness, pdwMaximumBrightness); 

Это предполагает, что вы хотите значения для первого монитора.

+0

Не могли бы вы дать фактический рабочий код? Кажется, я не могу найти, как называть эту функцию/WMI. – CodingBarfield