From ed42b62afa85eb0faf4eebe1cd5f0c5e58f1dddb Mon Sep 17 00:00:00 2001 From: Joe Hager Date: Mon, 24 Sep 2007 23:30:29 +0000 Subject: [PATCH] Init post. Gathers basic system info from reg. --- direct/src/http/windowsSystemInfo.py | 126 +++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100755 direct/src/http/windowsSystemInfo.py diff --git a/direct/src/http/windowsSystemInfo.py b/direct/src/http/windowsSystemInfo.py new file mode 100755 index 0000000000..f97c4474c7 --- /dev/null +++ b/direct/src/http/windowsSystemInfo.py @@ -0,0 +1,126 @@ +import sys +import os +import ctypes +import _winreg + +"""Class to extract system information from a MS-Windows Box: + +Instructions for Using: + +Instance the class WindowsSystemInformation +Then in the instance, access the following variables: + +os +cpu +totalRAM +totalVM +availableVM +availableRAM + +Example: + +s = SystemInformation() +print s.os + +s.refresh() # if you need to refresh the dynamic data (i.e. Memory stats, etc) +""" + +def get_registry_value(key, subkey, value): + if sys.platform != 'win32': + raise OSError("get_registry_value is only supported on Windows") + + key = getattr(_winreg, key) + handle = _winreg.OpenKey(key, subkey) + (value, type) = _winreg.QueryValueEx(handle, value) + return value + +class SystemInformation: + def __init__(self): + + # Just in in case somebody called this class by accident, we should + # check to make sure the OS is MS-Windows before continuing. + + assert sys.platform == 'win32', "Not an MS-Windows Computer. This class should not be called" + + # os contains the Operating System Name with Service Pack and Build + # Example: Microsoft Windows XP Service Pack 2 (build 2600) + + self.os = self._os_version().strip() + + # cpu contains the CPU model and speed + # Example: Intel Core(TM)2 CPU 6700 @ 2.66GHz + + self.cpu = self._cpu().strip() + + self.totalRAM, self.availableRAM, self.totalPF, self.availablePF, self.memoryLoad, self.totalVM, self.availableVM = self._ram() + + # totalRam contains the total amount of RAM in the system + + self.totalRAM = self.totalRAM / 1024 + + # totalVM contains the total amount of VM available to the system + + self.totalVM = self.totalVM / 1024 + + # availableVM contains the amount of VM that is free + + self.availableVM = self.availableVM / 1024 + + # availableRam: Ammount of available RAM in the system + + self.availableRAM = self.availableRAM / 1024 + + def refresh(self): + self.totalRAM, self.availableRAM, self.totalPF, self.availablePF, self.memoryLoad, self.totalVM, self.availableVM = self._ram() + self.totalRAM = self.totalRAM / 1024 + self.totalVM = self.totalVM / 1024 + self.availableVM = self.availableVM / 1024 + self.availableRAM = self.availableRAM / 1024 + + def _os_version(self): + def get(key): + return get_registry_value( + "HKEY_LOCAL_MACHINE", + "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", + key) + os = get("ProductName") + sp = get("CSDVersion") + build = get("CurrentBuildNumber") + return "%s %s (build %s)" % (os, sp, build) + + def _cpu(self): + return get_registry_value( + "HKEY_LOCAL_MACHINE", + "HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0", + "ProcessorNameString") + + def _ram(self): + kernel32 = ctypes.windll.kernel32 + c_ulong = ctypes.c_ulong + class MEMORYSTATUS(ctypes.Structure): + _fields_ = [ + ('dwLength', c_ulong), + ('dwMemoryLoad', c_ulong), + ('dwTotalPhys', c_ulong), + ('dwAvailPhys', c_ulong), + ('dwTotalPageFile', c_ulong), + ('dwAvailPageFile', c_ulong), + ('dwTotalVirtual', c_ulong), + ('dwAvailVirtual', c_ulong) + ] + + memoryStatus = MEMORYSTATUS() + memoryStatus.dwLength = ctypes.sizeof(MEMORYSTATUS) + kernel32.GlobalMemoryStatus(ctypes.byref(memoryStatus)) + return (memoryStatus.dwTotalPhys, memoryStatus.dwAvailPhys, memoryStatus.dwTotalPageFile, memoryStatus.dwAvailPageFile, memoryStatus.dwMemoryLoad, memoryStatus.dwTotalVirtual, memoryStatus.dwAvailVirtual) + +# To test, execute the script standalone. + +if __name__ == "__main__": + s = SystemInformation() + print s.os + print s.cpu + print "RAM : %dKb total" % s.totalRAM + print "RAM : %dKb free" % s.availableRAM + print "Total VM: %dKb" % s.totalVM + print "Available VM: %dKb" % s.availableVM