"""A COM Server which exposes the NT Performance monitor in a very rudimentary way Usage from VB: set ob = CreateObject("Python.PerfmonQuery") freeBytes = ob.Query("Memory", "Available Bytes") """ from win32com.server import exception, register import pythoncom, win32pdhutil, winerror class PerfMonQuery: _reg_verprogid_ = "Python.PerfmonQuery.1" _reg_progid_ = "Python.PerfmonQuery" _reg_desc_ = "Python Performance Monitor query object" _reg_clsid_ = "{64cef7a0-8ece-11d1-a65a-00aa00125a98}" _reg_class_spec_ = "win32com.servers.perfmon.PerfMonQuery" _public_methods_ = [ 'Query' ] def Query(self, object, counter, instance = None, machine = None): try: return win32pdhutil.GetPerformanceAttributes(object, counter, instance, machine=machine) except win32pdhutil.error as exc: raise exception.Exception(desc=exc.strerror) except TypeError as desc: raise exception.Exception(desc=desc,scode=winerror.DISP_E_TYPEMISMATCH) if __name__=='__main__': print("Registering COM server...") register.UseCommandLine(PerfMonQuery)