使用python获取window注册表值的方法

提供regfullpath的方法,可以自行封装个regpath的函数
import logging
import
pywintypes
import win32api
import win32con

def
getValue(strKeyPath, intAccessMask, strValueName, default=None): if strKeyPath[0] == '\\': strKeyPath = strKeyPath[1:] strRoot, strKey = strKeyPath.split('\\', 1) if strRoot not in g_dicKeyRoot: raise KeyError(strRoot) intRoot = g_dicKeyRoot[strRoot] if intAccessMask == None: intAccessMask = win32con.KEY_QUERY_VALUE | win32con.KEY_ENUMERATE_SUB_KEYS | win32con.KEY_NOTIFY h = win32api.RegOpenKeyEx(intRoot, strKey, 0, intAccessMask) try: value, vType = win32api.RegQueryValueEx(h, strValueName) except pywintypes.error as e: if str(e.args[0]) == '2': # value name doesn't exist if strValueName == '': return None, win32con.REG_NONE if default != None: return default, None raise return value, vType def actGetRegKey(strRegKeyPath, strKeyName): ''' @param strRegKeyPath: Specify registry key path. Ex. r"HKEY_LOCAL_MACHINE\SOFTWARE\test123" @param strKeyName: Specify registry key name. Ex. "VirusCount" @return: strKeyValue[0] -> key value @example: actGetRegKey(r"HKEY_LOCAL_MACHINE\SOFTWARE\test123","VirusCount") ''' try: intAccessMask = win32con.KEY_QUERY_VALUE | win32con.KEY_ENUMERATE_SUB_KEYS | win32con.KEY_NOTIFY strKeyValue = getValue(strRegKeyPath, intAccessMask, strKeyName) logging.debug( 'GetRegKey success, path %s, keyName %s , keyValue %s' % (strRegKeyPath, strKeyName, strKeyValue)) return strKeyValue[0] except pywintypes.error as e: if 'Access is denied' in str(e): logging.info( 'Reading regkey %s %s access is denied, change way to KEY_READ' % (strRegKeyPath, strKeyName)) strKeyValue = getValue(strRegKeyPath, win32con.KEY_READ, strKeyName) logging.debug( 'GetRegKey success, path %s, keyName %s , keyValue %s' % (strRegKeyPath, strKeyName, strKeyValue)) return strKeyValue[0] def GetRegistryValuebyFullPath(fullregpath, regkeyname): try: logging.info("full registry path: %s" % fullregpath) registryValue = actGetRegKey(fullregpath, regkeyname) logging.info("registryValue: %s" % registryValue) return registryValue except pywintypes.error as e: logging.error('GetRegistryValue Error! %s' % str(e))

 

posted @ 2021-11-23 15:35  LastOneBlackHole  阅读(401)  评论(0)    收藏  举报