def set_env(name, value, current=True): """Set HKCU/HKLM environment variables""" root = ( winreg.HKEY_CURRENT_USER if current else winreg.HKEY_LOCAL_MACHINE ) key = winreg.OpenKey(root, "Environment") try: _x, key_type = winreg.QueryValueEx(key, name) except WindowsError: key_type = winreg.REG_EXPAND_SZ key = winreg.OpenKey( root, "Environment", 0, winreg.KEY_SET_VALUE ) winreg.SetValueEx(key, name, 0, key_type, value) from win32gui import SendMessageTimeout from win32con import ( HWND_BROADCAST, WM_SETTINGCHANGE, SMTO_ABORTIFHUNG, ) SendMessageTimeout( HWND_BROADCAST, WM_SETTINGCHANGE, 0, "Environment", SMTO_ABORTIFHUNG, 5000, )
def get_env(name, current=True): """Return HKCU/HKLM environment variable name and value For example, get_user_env('PATH') may returns: ('Path', u'C:\\Program Files\\Intel\\WiFi\\bin\\')""" root = winreg.HKEY_CURRENT_USER if current else winreg.HKEY_LOCAL_MACHINE key = winreg.OpenKey(root, "Environment") for index in range(0, winreg.QueryInfoKey(key)[1]): try: value = winreg.EnumValue(key, index) if value[0].lower() == name.lower(): # Return both value[0] and value[1] because value[0] could be # different from name (lowercase/uppercase) return value[0], value[1] except: break