PythonによるWindowsレジストリのデータ取得方法
はじめに
レジストリデータ取得
■ registory.py
import winreg class Registory: HKEY = { 'HKEY_CLASSES_ROOT': winreg.HKEY_CLASSES_ROOT, 'HKEY_CURRENT_USER': winreg.HKEY_CURRENT_USER, 'HKEY_LOCAL_MACHINE': winreg.HKEY_LOCAL_MACHINE, 'HKEY_USERS': winreg.HKEY_USERS, 'HKEY_CURRENT_CONFIG': winreg.HKEY_CURRENT_CONFIG } def __init__(self, default_hkey='HKEY_CURRENT_USER', debug=False): # https://docs.python.org/ja/3/library/winreg.html self.key = None self.sub_key = '' self.handle = None self.default_hkey = Registory.HKEY[default_hkey] self.debug = debug def _debug(self, msg): if self.debug: print(f"{msg}") def _status(self): if self.debug: print(f"\n[!] ********** STATUS **********\n[-] Key: {self.key} \n[-] Sub_Key: {self.sub_key} \n[-] Handle: {self.handle} \n[-] Default: {self.default_hkey}\n") def _hkey(self, hkey=None): self._debug("\n[!] ********** _HKEY **********\n") self._status() if hkey is None: if self.key is None: return self.default_hkey else: return self.key elif isinstance(hkey, str): return Registory.HKEY.get(hkey, self.default_hkey) else: return hkey def open(self, key=None, sub_key=None): self._debug(f"\n[!] ********** OPEN **********\n[-] Key: {self.key} \n[-] Sub_Key: {self.sub_key} \n[-] Handle: {self.handle}\n") self.key = self._hkey(key) if sub_key is not None: self.sub_key = sub_key self.handle = winreg.OpenKeyEx(self.key, self.sub_key) self._status() return self.handle def info(self, key=None): self._debug(f"\n[!] ********** INFO **********\n[-] Key: {self.key} \n[-] Sub_Key: {self.sub_key} \n[-] Handle: {self.handle}\n") self.key = self._hkey(key) self._status() return winreg.QueryInfoKey(self.key) def get_keys(self, key=None, index=0): self._debug(f"\n[!] ********** GET_KEYS **********\n[-] Key: {self.key} \n[-] Sub_Key: {self.sub_key} \n[-] Handle: {self.handle}\n") self.key = self._hkey(key) key_info = self.info(self.key) self._debug(f"SubKeys: {key_info[0]} , values: {key_info[1]} , Date: {key_info[2]}") sub_keys = [winreg.EnumKey(self.key, idx) for idx in range(0, key_info[0])] self._status() return sub_keys def get(self, value_name): self._debug(f"\n[!] ********** GET **********\n Handle: {self.handle} , Value_Name: {value_name}") return winreg.QueryValueEx(self.handle, value_name) def close(self): return self.handle.Close()
■ main.py
import sys sys.path.append('.') from Registory import Registory ie = Registory(debug=True) print(ie.get_keys()) print(ie.info()) print(ie.get_keys('HKEY_LOCAL_MACHINE')) print(ie.info('HKEY_CURRENT_CONFIG')) h = ie.open(sub_key='Software') print(ie.get_keys(h)) print(ie.info(h)) print(ie.get_keys()) print(ie.info()) ie.close() ie2 = Registory(debug=True) ie2.open('HKEY_LOCAL_MACHINE', 'SOFTWARE\\Microsoft\\Internet Explorer\\Main') reg2_data = ie2.get('Start Page') print(reg2_data) reg2_data = ie2.get_keys('HKEY_LOCAL_MACHINE', 2) print(reg2_data) ie2.close()