Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 20.09.2014
Сообщений: 5

Удаление ключей реестра с исключением

20.09.2014, 18:34. Показов 3784. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include "Registry.hpp"
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TRegistry *reg=new TRegistry();
reg->RootKey=HKEY_CURRENT_USER;
reg->DeleteKey("Software\\TEST");
delete reg;
}
//---------------------------------------------------------------------------
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//---------------------------------------------------------------------------
 
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TButton *Button1;
    void __fastcall Button1Click(TObject *Sender);
private:    // User declarations
public:     // User declarations
    __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

Задача
Удалить все ключи из HKEY_CURRENT_USER\Software
Кроме стандартных и тех которые находятся в исключении

Как сделать удаление с исключением ключей ?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.09.2014, 18:34
Ответы с готовыми решениями:

Удаление ключей реестра через Delphi
День добрый. Нужно удалить ключи реестра с неопределенными именами в Delphi. Например, данный код удаляет нужный ключ реестра ... ...

Экспорт ключей реестра
Есть программка которая удаляет найденые ключи реестра, хочу добавить возможность экспортировать ключи и разделы перед удалением, но как? ...

Вывод значения ключей реестра
Здравствуйте, как в С++ на форме можно вывести подключи какогото ключа реестра? например вводим в Edit ключ HKEY_CURRENT_USER и у нас...

10
Модератор
 Аватар для D1973
9912 / 6449 / 2455
Регистрация: 21.01.2014
Сообщений: 27,377
Записей в блоге: 3
20.09.2014, 22:11
Первое, что приходит на ум - составить список тех ключей, которые будут считаться стандартными и исключениями. Потом читаем по порядку все ключи раздела HKCU\SOFTWARE и сравниваем его с нашим списком: нет такого ключа в списке - удаляем, есть - не трогаем.

Не по теме:

После успешного удаления скорее всего переустанавливаем систему :D

0
0 / 0 / 0
Регистрация: 20.09.2014
Сообщений: 5
21.09.2014, 08:50  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
Первое, что приходит на ум - составить список тех ключей, которые будут считаться стандартными и исключениями. Потом читаем по порядку все ключи раздела HKCU\SOFTWARE и сравниваем его с нашим списком: нет такого ключа в списке - удаляем, есть - не трогаем.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include "Registry.hpp"
#include <tchar.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
RegDeleteKey(HKEY_CURRENT_USER, 'SOFTWARE\MyProg');
}
//---------------------------------------------------------------------------
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//---------------------------------------------------------------------------
 
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TButton *Button1;
    void __fastcall Button1Click(TObject *Sender);
private:    // User declarations
public:     // User declarations
    __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
Checking project dependencies...
Compiling Project1.cbproj (Debug, Win32)
bcc32 command line for "Project1.cpp"
c:\program files (x86)\embarcadero\studio\15.0\bin\bcc32. exe -D_DEBUG -DUSEPACKAGES -n.\Win32\Debug -I"c:\program files
(x86)\embarcadero\studio\15.0\include\wi ndows\vcl";"C:\Program Files (x86)\Embarcadero\Studio\15.0\include\bo ost_1_39\boost\tr1\tr1";"C:\Program
Files (x86)\Embarcadero\Studio\15.0\include\bo ost_1_39";"c:\program files (x86)\embarcadero\studio\15.0\include";" c:\program files
(x86)\embarcadero\studio\15.0\include\di nkumware";"c:\program files (x86)\embarcadero\studio\15.0\include\wi ndows\crtl";"c:\program files
(x86)\embarcadero\studio\15.0\include\wi ndows\sdk";"c:\program files (x86)\embarcadero\studio\15.0\include\wi ndows\rtl";"c:\program files
(x86)\embarcadero\studio\15.0\include\wi ndows\vcl";"c:\program files (x86)\embarcadero\studio\15.0\include\wi ndows\fmx";"C:\Program Files
(x86)\FastReports\LibD21";"C:\Program Files (x86)\Raize\CS5\Lib\RS-XE7\Win32";C:\Users\Public\Documents\Emb arcadero\Studio\15.0\hpp\Win32 -y -Q -k
-r- -c -tR -tM -tW -C8 -o.\Win32\Debug\Project1.obj -w-par -Od -v -vi- -H=.\Win32\Debug\Project1.pch -H Project1.cpp
bcc32 command line for "Unit1.cpp"
c:\program files (x86)\embarcadero\studio\15.0\bin\bcc32. exe -D_DEBUG -DUSEPACKAGES -n.\Win32\Debug -I"c:\program files
(x86)\embarcadero\studio\15.0\include\wi ndows\vcl";"C:\Program Files (x86)\Embarcadero\Studio\15.0\include\bo ost_1_39\boost\tr1\tr1";"C:\Program
Files (x86)\Embarcadero\Studio\15.0\include\bo ost_1_39";"c:\program files (x86)\embarcadero\studio\15.0\include";" c:\program files
(x86)\embarcadero\studio\15.0\include\di nkumware";"c:\program files (x86)\embarcadero\studio\15.0\include\wi ndows\crtl";"c:\program files
(x86)\embarcadero\studio\15.0\include\wi ndows\sdk";"c:\program files (x86)\embarcadero\studio\15.0\include\wi ndows\rtl";"c:\program files
(x86)\embarcadero\studio\15.0\include\wi ndows\vcl";"c:\program files (x86)\embarcadero\studio\15.0\include\wi ndows\fmx";"C:\Program Files
(x86)\FastReports\LibD21";"C:\Program Files (x86)\Raize\CS5\Lib\RS-XE7\Win32";C:\Users\Public\Documents\Emb arcadero\Studio\15.0\hpp\Win32 -y -Q -k
-r- -c -tR -tM -tW -C8 -o.\Win32\Debug\Unit1.obj -w-par -Od -v -vi- -H=.\Win32\Debug\Project1.pch -H Unit1.cpp
[bcc32 Warning] Unit1.cpp(21): W8098 Multi-character character constant
Full parser context
Unit1.cpp(20): parsing: void _fastcall TForm1::Button1Click(TObject *)
[bcc32 Error] Unit1.cpp(21): E2129 Character constant too long (or empty)
Full parser context
Unit1.cpp(20): parsing: void _fastcall TForm1::Button1Click(TObject *)
[bcc32 Error] Unit1.cpp(21): E2034 Cannot convert 'unsigned int' to 'const char *'
Full parser context
Unit1.cpp(20): parsing: void _fastcall TForm1::Button1Click(TObject *)
[bcc32 Error] Unit1.cpp(21): E2342 Type mismatch in parameter 'lpSubKey' (wanted 'const char *', got 'unsigned int')
Full parser context
Unit1.cpp(20): parsing: void _fastcall TForm1::Button1Click(TObject *)
Failed
Elapsed time: 00:00:00.1

Не компилируеться в свойствах проекта стоит char
Пробовал и char и wchar_t
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,896
Записей в блоге: 11
21.09.2014, 09:31
C++
21
RegDeleteKey(HKEY_CURRENT_USER, "SOFTWARE\\MyProg");
, не Дельфи ведь, строки в С++ ограничиваются кавычками, да и про экранирование не надо забывать...
0
0 / 0 / 0
Регистрация: 20.09.2014
Сообщений: 5
21.09.2014, 09:47  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
21
RegDeleteKey(HKEY_CURRENT_USER, "SOFTWARE\\MyProg");
Код не удаляет ключ из реестра!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include "Registry.hpp"
#include <tchar.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
RegDeleteKey(HKEY_CURRENT_USER, "SOFTWARE\\TEST");
}
//---------------------------------------------------------------------------
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//---------------------------------------------------------------------------
 
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TButton *Button1;
    void __fastcall Button1Click(TObject *Sender);
private:    // User declarations
public:     // User declarations
    __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
компилируется без ошибок,но код не удаляет ключ реестра !
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,896
Записей в блоге: 11
21.09.2014, 10:02
Возвращай результат из RegDeleteKey, и проверяй его, будет понятно с чем это связано:
C++
1
2
    int result = RegDeleteKey(HKEY_CURRENT_USER, "SOFTWARE\\Test");
    ShowMessage(IntToStr(result) + ": " + SysErrorMessage(result));
0
Модератор
 Аватар для D1973
9912 / 6449 / 2455
Регистрация: 21.01.2014
Сообщений: 27,377
Записей в блоге: 3
21.09.2014, 16:30
Прочитай ВНИМАТЕЛЬНО вот эту тему. Тут есть практически все, что необходимо. Единственное, чего там нет - это как прикрутить мозги к проекту (Без обид, ничего личного, но поиском надо пользоваться иногда...)
0
0 / 0 / 0
Регистрация: 20.09.2014
Сообщений: 5
22.09.2014, 10:38  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include "Registry.hpp"
#include <tchar.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int result = RegDeleteKey(HKEY_CURRENT_USER, "SOFTWARE\\TEST");
ShowMessage(IntToStr(result) + ": " + SysErrorMessage(result));
}
//---------------------------------------------------------------------------
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//---------------------------------------------------------------------------
 
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TButton *Button1;
    void __fastcall Button1Click(TObject *Sender);
private:    // User declarations
public:     // User declarations
    __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
======================================== ====================================
C++
1
2
3
4
TRegistry *reg=new TRegistry();
reg->RootKey=HKEY_CURRENT_USER;
reg->DeleteKey("Software\\TEST");
delete reg;
Мне не нужен код в из этой темы:Работа с реестром в C++ Builder
======================================== ====================================

Ошибка Отказано в доступе,не удается найти указанный файл
Перепробовал всё и нечего не понял, как сделать чтобы работал ?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,896
Записей в блоге: 11
22.09.2014, 10:46
Цитата Сообщение от Wnambiazal Посмотреть сообщение
как сделать чтобы работал
Ты очень удивишься, но под Win7 32-bit этот код прекрасно удаляет содержимое указанной ветки реестра (если она там есть, конечно), а вот если ее нет - то будет как раз указанная ошибка. Проблемы могут начаться с 64-битными системами... Там тебе нужен RegDeleteKeyEx с возможностью указывать KEY_WOW64_32KEY/KEY_WOW64_64KEY
0
0 / 0 / 0
Регистрация: 20.09.2014
Сообщений: 5
22.09.2014, 11:07  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
Ты очень удивишься, но под Win7 32-bit этот код прекрасно удаляет содержимое указанной ветки реестра (если она там есть, конечно), а вот если ее нет - то будет как раз указанная ошибка. Проблемы могут начаться с 64-битными системами...
Как может быть такое?
Все проекты и программы которые были сделаны на Windows 7 работают и на Windows 8.1 Enterprise x64,RAD Studio XE7

А этот код не работает!
А вот это работает
C++
1
2
3
4
TRegistry *reg=new TRegistry();
reg->RootKey=HKEY_CURRENT_USER;
reg->DeleteKey("Software\\TEST");
delete reg;
Добавлено через 4 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include "Registry.hpp"
#include <tchar.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
RegDeleteKeyEx(HKEY_CURRENT_USER, "SOFTWARE\\MyProg");
//---------------------------------------------------------------------------
Ошибки
Checking project dependencies...
Compiling Project1.cbproj (Debug, Win32)
bcc32 command line for "Unit1.cpp"
c:\program files (x86)\embarcadero\studio\15.0\bin\bcc32. exe -D_DEBUG -DUSEPACKAGES -n.\Win32\Debug -I"c:\program files
(x86)\embarcadero\studio\15.0\include\wi ndows\vcl";"C:\Program Files (x86)\Embarcadero\Studio\15.0\include\bo ost_1_39\boost\tr1\tr1";"C:\Program
Files (x86)\Embarcadero\Studio\15.0\include\bo ost_1_39";"c:\program files (x86)\embarcadero\studio\15.0\include";" c:\program files
(x86)\embarcadero\studio\15.0\include\di nkumware";"c:\program files (x86)\embarcadero\studio\15.0\include\wi ndows\crtl";"c:\program files
(x86)\embarcadero\studio\15.0\include\wi ndows\sdk";"c:\program files (x86)\embarcadero\studio\15.0\include\wi ndows\rtl";"c:\program files
(x86)\embarcadero\studio\15.0\include\wi ndows\vcl";"c:\program files (x86)\embarcadero\studio\15.0\include\wi ndows\fmx";"C:\Program Files
(x86)\FastReports\LibD21";"C:\Program Files (x86)\Raize\CS5\Lib\RS-XE7\Win32";C:\Users\Public\Documents\Emb arcadero\Studio\15.0\hpp\Win32 -y -Q -k
-r- -c -tR -tM -tW -C8 -o.\Win32\Debug\Unit1.obj -w-par -Od -v -vi- -H=.\Win32\Debug\Project1.pch -H Unit1.cpp
[bcc32 Error] Unit1.cpp(21): E2193 Too few parameters in call to '__stdcall RegDeleteKeyExA(HKEY__ *,const char *,unsigned long,unsigned long)'
Full parser context
Unit1.cpp(20): parsing: void _fastcall TForm1::Button1Click(TObject *)
[bcc32 Error] Unit1.cpp(21): E2134 Compound statement missing }
Full parser context
Unit1.cpp(20): parsing: void _fastcall TForm1::Button1Click(TObject *)
Failed
Elapsed time: 00:00:00.1
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,896
Записей в блоге: 11
22.09.2014, 11:20
Цитата Сообщение от Wnambiazal Посмотреть сообщение
А этот код не работает!
Этот код у тебя просто не компилируется, потому что ты после 21-ой строки забыл закрыть фигурную скобку. Ну, и к тому же, у RegDeleteKeyEx 4 параметра, а не 2... Посмотри уже наконец в первоисточник, я за тебя программу писать не собираюсь.

Это нужно тебе, вот и разбирайся сам.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.09.2014, 11:20
Помогаю со студенческими работами здесь

Изменение ключей реестра Windows
Мне необходимо в реестре поменять IpAdress В пути к соотв. переменной реестра есть ключ AEF37A0A-E385-4BAD-B228-34FD29980B5C Я так...

Проверка изменения ключей в разделов реестра
Помогите сделать проверку только уже выбранных разделов реестра: ссылка на программу для проверки реестра:...

Чтение ключей реестра из определенного раздела
Здравствуйте! Есть код который читает запись ключа реестра Set Reg = CreateObject(&quot;WScript.Shell&quot;) Reg.RegRead...

Вывод всех ключей автозагрузки реестра
Всем привет! нужно вывести файлы и папки HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\ ! из папки...

Прочитать имена (пути?) ключей реестра
Добрый день, необходимо получить имена(так они подписаны в редакторе реестра) пары ключей (для приборов привязанных к COM портам). ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru