Сообщений 0    Оценка 185        Оценить  
Система Orphus

Как переименовать ключ в реестре?

Автор: Александр Шаргин
Опубликовано: 18.02.2001
Исправлено: 13.03.2005
Версия текста: 1.0

К сожалению, в 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");

Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав.
    Сообщений 0    Оценка 185        Оценить