0
A
回答
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;
}
相關問題
- 1. 用Java獲取Windows系統溫度
- 2. 從操作系統獲取事件
- 3. 從系統獲取註銷事件
- 4. 獲取亮度
- 5. 捕獲系統事件
- 6. 改變服務內的系統亮度
- 7. UNIX系統和Windows系統中讀取.CSV文件的差異
- 8. 在活動中捕獲系統事件
- 9. 獲取在Windows操作系統中寫入文件的權限
- 10. Logback和Windows事件系統集成
- 11. 訂閱Windows系統事件本機c + +
- 12. 閃存,同時更改系統亮度
- 13. Android調整系統亮度服務
- 14. 如何更改系統亮度?
- 15. pharo中的事件系統
- 16. 獲取C++中的系統文件夾
- 17. 瞭解PHP事件調度系統
- 18. 獲取系統
- 19. 在Python中獲取Windows /系統文件夾位置
- 20. 在Angular 2中獲取系統小時更改事件
- 21. 如何捕獲Windows操作系統事件? (C#)
- 22. 在windows phone8中獲取windows操作系統版本
- 23. 獲取顯示亮度
- 24. 如何訪問fsevents以獲取文件系統事件?
- 25. Windows系統通知事件服務和自定義事件
- 26. Boost事件系統
- 27. 讀取Windows中的EFI系統表
- 28. Joomla - 如何捕獲系統事件
- 29. 使用python捕獲系統事件
- 30. 在系統級聽取重要事件
你說的亮度昌意思ES?什麼亮度? – Spook
說在筆記本電腦或平板電腦的Windows操作系統,我們可以改變系統的亮度,對吧?所以,當亮度發生變化時,我需要得到這個事件。@ Spook –
當然,但是AFAIK這不是一個與操作系統相關的值(至少在Windows上)。每個筆記本或平板電腦都有自己的驅動程序,負責傳遞有關亮度的硬件信息。我很難懷疑有一種通用的方式來訪問這些信息。 – Spook