2014-01-31 36 views
0

有人可以指導我如何獲得亮度變化事件使用vC++在windows系統中? 或我需要得到亮度滑塊值,只要它會改變。 任何幫助將非常感激。獲取windows中的系統亮度事件

在此先感謝。

+1

你說的亮度昌意思ES?什麼亮度? – Spook

+0

說在筆記本電腦或平板電腦的Windows操作系統,我們可以改變系統的亮度,對吧?所以,當亮度發生變化時,我需要得到這個事件。@ Spook –

+2

當然,但是AFAIK這不是一個與操作系統相關的值(至少在Windows上)。每個筆記本或平板電腦都有自己的驅動程序,負責傳遞有關亮度的硬件信息。我很難懷疑有一種通用的方式來訪問這些信息。 – Spook

回答

0

遲到的答案,但因爲我一直在尋找同樣的事情。雖然控制亮度不是Windows任務,但有時也是驅動程序的任務,並且也可能直接與ACPI調用相關,但我們仍然可以通過實現WMI事件從Windows獲取有關其更改的信息。特別是,您需要實施WmiMonitorBrightnessEvent,它會在Windows收到亮度變化事件時爲您提供所需的信息。下面的示例代碼是在@RRUZ答案here中直接轉換爲C#代碼的C++/CLI,在那裏他使用了WmiMonitorBrightnessEvent。

EventWatcherAsync.h

#pragma once 
using namespace System; 
using namespace System::Management; 

ref class EventWatcherAsync 
{ 
public: 
    void WmiEventHandler(Object^ sender, EventArrivedEventArgs^ e); 
    EventWatcherAsync(); 
}; 

EventWatcherAsync.cpp

#include "stdafx.h" 
#include "EventWatcherAsync.h" 

void EventWatcherAsync::WmiEventHandler(Object^ sender, EventArrivedEventArgs^ e) 
{ 
    Console::WriteLine("Active :   " + e->NewEvent->Properties["Active"]->Value->ToString()); 
    Console::WriteLine("Brightness :  " + e->NewEvent->Properties["Brightness"]->Value->ToString()); 
    Console::WriteLine("InstanceName : " + e->NewEvent->Properties["InstanceName"]->Value->ToString()); 
} 

EventWatcherAsync::EventWatcherAsync() 
{ 
    try 
    { 
     System::String^ ComputerName = "localhost"; 
     System::String^ WmiQuery; 
     ManagementEventWatcher^ Watcher; 
     ManagementScope^ Scope; 


     if (ComputerName != "localhost") 
     { 
      ConnectionOptions^ Conn = gcnew ConnectionOptions(); 
      Conn->Username = ""; 
      Conn->Password = ""; 
      Conn->Authority = "ntlmdomain:DOMAIN"; 
      Scope = gcnew ManagementScope(String::Format("\\\\{0}\\root\\WMI", ComputerName), Conn); 
     } 
     else 
      Scope = gcnew ManagementScope(String::Format("\\\\{0}\\root\\WMI", ComputerName)); 
     Scope->Connect(); 

     WmiQuery = "Select * From WmiMonitorBrightnessEvent"; 

     Watcher = gcnew ManagementEventWatcher(Scope, gcnew EventQuery(WmiQuery)); 
     Watcher->EventArrived += gcnew EventArrivedEventHandler(this, &EventWatcherAsync::WmiEventHandler); 
     Watcher->Start(); 
     Console::Read(); 
     Watcher->Stop(); 
    } 
    catch (Exception^ e) 
    { 
     Console::WriteLine("Exception {0} Trace {1}", e->Message, e->StackTrace); 
    } 
} 

Main.cpp的

#include "stdafx.h" 
#include "EventWatcherAsync.h" 

using namespace System; 

int main(array<System::String ^> ^args) 
{ 
    Console::WriteLine("Listening {0}", "WmiMonitorBrightnessEvent"); 
    Console::WriteLine("Press Enter to exit"); 
    EventWatcherAsync^ eventWatcher = gcnew EventWatcherAsync(); 
    Console::Read(); 
    return 0; 
}