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

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

20.09.2014, 18:34. Показов 3832. Ответов 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
9929 / 6467 / 2457
Регистрация: 21.01.2014
Сообщений: 27,423
Записей в блоге: 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
33405 / 21515 / 8236
Регистрация: 22.10.2011
Сообщений: 36,916
Записей в блоге: 12
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
33405 / 21515 / 8236
Регистрация: 22.10.2011
Сообщений: 36,916
Записей в блоге: 12
21.09.2014, 10:02
Возвращай результат из RegDeleteKey, и проверяй его, будет понятно с чем это связано:
C++
1
2
    int result = RegDeleteKey(HKEY_CURRENT_USER, "SOFTWARE\\Test");
    ShowMessage(IntToStr(result) + ": " + SysErrorMessage(result));
0
Модератор
 Аватар для D1973
9929 / 6467 / 2457
Регистрация: 21.01.2014
Сообщений: 27,423
Записей в блоге: 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
33405 / 21515 / 8236
Регистрация: 22.10.2011
Сообщений: 36,916
Записей в блоге: 12
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
33405 / 21515 / 8236
Регистрация: 22.10.2011
Сообщений: 36,916
Записей в блоге: 12
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
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru