监控多台机器的电源事件
注:这个例子演示了外部事件、线程、远程监控等,所有这些都在一个小小的包里面!无论一台机器何时进入或退出挂起状态,电源子系统都会通过WMI产生一个外部事件。外部事件是非常有用的,因为WMI不必轮询也可以保证你不会错过任何事件。这里的多台机器只是使用进程的一个实际例子而已。- import pythoncom
- import wmi
- import threading
- import Queue
- class Server (threading.Thread):
- def __init__ (self, results, server, user, password):
- threading.Thread.__init__ (self)
- self.results = results
- self.server = server
- self.user = user
- self.password = password
- self.setDaemon (True)
- def run (self):
- pythoncom.CoInitialize ()
- try:
- #
- # If you don't want to use explicit logons, remove
- # the user= and password= params here and ensure
- # that the user running *this* script has sufficient
- # privs on the remote machines.
- #
- c = wmi.WMI (self.server, user=self.user, password=self.password)
- power_watcher = c.Win32_PowerManagementEvent.watch_for ()
- while True:
- self.results.put ((self.server, power_watcher ()))
- finally:
- pythoncom.CoUninitialize ()
- #
- # Obviously, change these to match the machines
- # in your network which probably won't be named
- # after Harry Potter characters. And which hopefully
- # use a less obvious admin password.
- #
- servers = [
- ("goyle", "administrator", "secret"),
- ("malfoy", "administrator", "secret")
- ]
- if __name__ == '__main__':
- power_events = Queue.Queue ()
- for server, user, password in servers:
- print "Watching for", server
- Server (power_events, server, user, password).start ()
- while True:
- server, power_event = power_events.get ()
- print server, "=>", power_event.EventType
复制代码 查看当前的墙纸- import wmi
- import win32api
- import win32con
- c = wmi.WMI ()
- full_username = win32api.GetUserNameEx (win32con.NameSamCompatible)
- for desktop in c.Win32_Desktop (Name=full_username):
- print \
- desktop.Wallpaper or "[No Wallpaper]", \
- desktop.WallpaperStretched, desktop.WallpaperTiled
复制代码 |