Форум сайта python.su
Доброго времени суток.
Как осуществить удаление ключа (со всеми его подключами)?
Может есть у кого на примете хороший враппер над низкоуровневым _winreg?
Офлайн
Офлайн
пробовали… не хотелось использовать целый модуль, хотел подцепить идею…
Офлайн
как удалить рекурсивно? тогда идея есть и в shutil.rmtree
Офлайн
читаем MSDN
SHDeleteKey Function
--------------------------------------------------------------------------------
Deletes a subkey and all its descendants. The function will remove the key and all of the key's values from the registry.
Syntax
DWORD SHDeleteKey( HKEY hkey,
LPCTSTR pszSubKey
);
Parameters
hkey
Handle to the currently open key, or any of the following predefined values:
HKEY_CLASSES_ROOT
HKEY_CURRENT_CONFIG
HKEY_CURRENT_USER
HKEY_DYN_DATA (Microsoft® Windows® 95 only)
HKEY_LOCAL_MACHINE
HKEY_PERFORMANCE_DATA (Microsoft Windows NT® only)
HKEY_USERS
pszSubKey
Address of a null-terminated string specifying the name of the key to delete.
Return Value
Returns ERROR_SUCCESS if successful, or a nonzero error code defined in Winerror.h otherwise. You can use the FormatMessage function with the FORMAT_MESSAGE_FROM_SYSTEM flag to retrieve a generic description of the error.
Function Information
Minimum DLL Version shlwapi.dll version 4.71 or later
Custom Implementation No
Header shlwapi.h
Import library shlwapi.lib
Minimum operating systems Windows 2000, Windows NT 4.0 with Internet Explorer 4.0, Windows 98, Windows 95 with Internet Explorer 4.0
Офлайн
мм. я новичок в питоне… поэтому не знаю как получить доступ к этой функции(
Офлайн
в таком случае или ищите готовый высокоуровневый враппер или начинайте читать описание ctypes и MSDN :-)
Офлайн
Вообщем путем нагугливания и вырезания из ООП структуры получил следующее
def getSubKeys(key):
keylist,idx = ,0
while True:
try:
subkey = _winreg.EnumKey(key,idx)
keylist.append(subkey)
idx +=1
except EnvironmentError:
break
return keylist
def DeleteKeysFromReg(aKey,key):
childKeys = getSubKeys(key)
for i in childKeys:
childKey = {“PyHKey”:_winreg.CreateKey(key,i),“name”:str(i)}
DeleteKeysFromReg(key,childKey)
_winreg.DeleteKey(aKey,key)
aReg = _winreg.ConnectRegistry(None, _winreg.HKEY_CURRENT_USER)
audioKey = _winreg.OpenKey(aReg,r“Software\SJLabs\SJvoip Project\SJphone\Options\Audio”, 0, _winreg.KEY_ALL_ACCESS)
optsKey = _winreg.OpenKey(aReg,r“Software\SJLabs\SJvoip Project\SJphone\Options”, 0, _winreg.KEY_ALL_ACCESS)
DeleteKeysFromReg(optsKey,{“PyHKey”:audioKey,“name”:“Audio”})
Офлайн