问题
This is my first post on SO, however a lot of Googling has led me here over the years.
I am trying to detect brightness changes on my laptop using a set of tools called Windows Management Instrumentation (WMI), particularly an event class called WmiMonitorBrightnessEvent and a watch_for listener. The use of the latter is described here:
http://timgolden.me.uk/python/wmi/wmi.html#wmi._wmi_namespace.watch_for
c = wmi.WMI ()
watcher = c.watch_for (
notification_type="Creation",
wmi_class="Win32_Process",
delay_secs=2,
Name='calc.exe'
)
calc_created = watcher ()
And documentation for the WMI event is found here:
https://docs.microsoft.com/en-us/windows/win32/wmicoreprov/wmimonitorbrightnessevent
However, only the second example on the timgolden website works, which is for detecting if the calculator gets opened and closed.
Here is one reference that might be useful: https://www.autohotkey.com/boards/viewtopic.php?f=5&t=58914
Please guide me on adapting the code to detect brightness changes on my laptop! Best regards :--) BTW I am on Python 3 and Windows 10
Here is the code I run
import wmi
c = wmi.WMI()
power_watcher = c.Win32_WmiMonitorBrightnessEvent.watch_for()
print(power_watcher)
and the error
Traceback (most recent call last):
File "C:\Users\Arno\AppData\Local\Programs\Python\Python38\lib\site-packages\wmi.py", line 1145, in __getattr__
return self._cached_classes (attribute)
File "C:\Users\Arno\AppData\Local\Programs\Python\Python38\lib\site-packages\wmi.py", line 1156, in _cached_classes
self._classes_map[class_name] = _wmi_class (self, self._namespace.Get (class_name))
File "<COMObject winmgmts:>", line 2, in Get
File "C:\Users\Arno\AppData\Local\Programs\Python\Python38\lib\site-packages\win32com\client\dynamic.py", line 287, in _ApplyTypes_
result = self._oleobj_.InvokeTypes(*(dispid, LCID, wFlags, retType, argTypes) + args)
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, 'SWbemServicesEx', 'Not found ', None, 0, -2147217406), None)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "watcher4.py", line 3, in <module>
power_watcher = c.Win32_WmiMonitorBrightnessEvent.watch_for()
File "C:\Users\Arno\AppData\Local\Programs\Python\Python38\lib\site-packages\wmi.py", line 1147, in __getattr__
return getattr (self._namespace, attribute)
File "C:\Users\Arno\AppData\Local\Programs\Python\Python38\lib\site-packages\win32com\client\dynamic.py", line 527, in __getattr__
raise AttributeError("%s.%s" % (self._username_, attr))
AttributeError: winmgmts:.Win32_WmiMonitorBrightnessEvent
回答1:
Solved it as such
import wmi
c = wmi.WMI(namespace='wmi')
print_job_watcher = c.WmiMonitorBrightnessEvent.watch_for (
notification_type="Modification",
delay_secs=1
)
event_happened = print_job_watcher ()
print(event_happened)
来源:https://stackoverflow.com/questions/59914907/how-can-i-detect-brightness-changes-using-python-and-wmi-on-windows-10