К сожалению, в Win32 API нет функции, которая выполняла бы переименование ключа в реестре. Если проследить, каким образом редактор regedit.exe переименовывает ключ, нетрудно убедиться, что он просто копирует заданный ключ на новое место, а затем удаляет его на старом. Этой же стратегией можем воспользоваться и мы. В самом крупном приближении требуемая функция выглядит так.
RenameKey(HKEY hParentKey, LPCTSTR szSrc, LPCTSTR szTarg) { // Копируем szSrc в szTarg. // Удаляем szSrc. } |
Копирование ключей в реестре подробно рассмотрено в статье "Как скопировать ключ в реестре?", а удаление ключей - в статье "Как удалить ключ из реестра?". Нам остаётся только воспользоваться функциями CopyKey и DeleteKey, описанными в этих статьях. При этом функция RenameKey приобретает следующий вид.
LONG DeleteKey(HKEY hParentKey, LPCTSTR szKey); LONG CopyKey(HKEY hSrcParent, HKEY hTargParent, LPCTSTR szSrcKey, LPCTSTR szTargKey); RenameKey(HKEY hParentKey, LPCTSTR szSrc, LPCTSTR szTarg) { LONG nRes = CopyKey(hParentKey, hParentKey, szSrc, szTarg); if(nRes != ERROR_SUCCESS) return nRes; return DeleteKey(hParentKey, szSrc); } |
В качестве примера использования этой функции рассмотрим код, который изменяет имя ключа "Some key" из раздела HKEY_LOCAL_MACHINE на "Yet another key".
RenameKey(HKEY_LOCAL_MACHINE, "Some key", "Yet another key"); |