mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-04 02:42:49 -04:00
Init post. Gathers basic system info from reg.
This commit is contained in:
parent
3791482eda
commit
ed42b62afa
126
direct/src/http/windowsSystemInfo.py
Executable file
126
direct/src/http/windowsSystemInfo.py
Executable file
@ -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
|
Loading…
x
Reference in New Issue
Block a user