Alex83 |
Отправлено: 10.03.2004, 13:18 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 25
|
Мне надо производить поиск в реестре !!!
допустим мне надо найти путь к ключу с именем "qwer"
как это сделать? |
|
olegenty |
Отправлено: 10.03.2004, 13:55 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
Есть такой класс TRegistry.
Ты справку читать не пробовал? Будет примерно так:
CODE |
TRegistry *r = new TRegistry();
// Реально вместо "\\Software" — твой ключ для поиска
// Корень определяется свойством r->RootKey, например:
// r->RootKey = HKEY_LOCAL_MACHINE;
// по умолчанию — HKEY_CURRENT_USER
if (r->OpenKey("\\Software", false))
{
TStringList *l = new TStringList();
// получаешь список входящих ключей;
r->GetKeyNames(l);
for (int i = 0; i < l->Strings->Count; i++)
{
if (l->Strings[i] == "qwer")
{
ShowMessage("Путь: " + r->CurrentKey + "\\" + l->Strings[i]);
}
}
} else
{
ShowMessage("Что-то не срослось")
}
|
писал навскидку по памяти, и, тебе будет нужна рекурсия, либо итерация, на твой вкус.
|
|
Gedeon |
Отправлено: 10.03.2004, 15:33 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
Да воспользуйтесь поиском по форуму со словом TRegistry — Инфы куча
|
|
Alex83 |
Отправлено: 10.03.2004, 16:05 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 25
|
Что товой код твой не работает куча ошибок!!! |
|
olegenty |
Отправлено: 10.03.2004, 16:16 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
Потерпи до завтра, рабочий опубликую.
|
|
olegenty |
Отправлено: 10.03.2004, 17:10 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
Вот тебе протестированный рабочий код (на форме компонент TTreeView *t и кнопка TButton *TButton1):
[CODE]
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TRegistry *r = new TRegistry();
r->RootKey = HKEY_LOCAL_MACHINE;
if (r->OpenKey("\\", false))
{
TTreeNode *n = t->Items->AddChild(NULL, "HKEY_LOCAL_MACHINE");
TStringList *s = new TStringList();
r->GetKeyNames(s);
for (int i = 0; i < s->Count; i++)
{
TTreeNode *c = t->Items->AddChild(n, s->Strings[i]);
AnsiString asCurrentPath = r->CurrentPath;
if ((r->OpenKey(asCurrentPath + "\\" + s->Strings[i], false)) &&
(r->HasSubKeys()))
{
BuildNode(c, r, asCurrentPath + "\\" + s->Strings[i]);
}
r->OpenKey(asCurrentPath + "\\", false);
}
}
r->RootKey = HKEY_CURRENT_USER;
if (r->OpenKey("\\", false))
{
TTreeNode *n = t->Items->AddChild(NULL, "HKEY_CURRENT_USER");
TStringList *s = new TStringList();
r->GetKeyNames(s);
for (int i = 0; i < s->Count; i++)
{
TTreeNode *c = t->Items->AddChild(n, s->Strings[i]);
AnsiString asCurrentPath = r->CurrentPath;
if ((r->OpenKey(asCurrentPath + "\\" + s->Strings[i], false)) &&
(r->HasSubKeys()))
{
BuildNode(c, r, asCurrentPath + "\\" + s->Strings[i]);
}
r->OpenKey(asCurrentPath + "\\", false);
}
}
delete r;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BuildNode(TTreeNode *p, TRegistry *r, AnsiString asTopPath)
{
TStringList *s = new TStringList();
r->GetKeyNames(s);
for (int i = 0; i < s->Count; i++)
{
TTreeNode *c = t->Items->AddChild(p, s->Strings[i]);
if ((r->OpenKey(asTopPath + "\\" + s->Strings[i], false)) &&
(r->HasSubKeys()))
{
BuildNode(c, r, asTopPath + "\\" + s->Strings[i]);
}
r->OpenKey(asTopPath + "\\", false);
}
}
[CODE]
|
|
Alex83 |
Отправлено: 10.03.2004, 19:39 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 25
|
В этом коде что не ладится компилятор не пропускает
(TTreeNode *n или TTreeView *t) |
|
olegenty |
Отправлено: 11.03.2004, 07:54 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
t — TTreeView, лежит на форме. Всё ладится, я сначала у себя запустил.
Button1 — TButton.
|
|
olegenty |
Отправлено: 11.03.2004, 08:03 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
Файл проекта
RegSearch.bpr
CODE |
<?xml version='1.0' encoding='utf-8' ?>
<!-- C++Builder XML Project -->
<PROJECT>
<MACROS>
<VERSION value="BCB.06.00"/>
<PROJECT value="RegSearch.exe"/>
<OBJFILES value="RegSearch.obj FormMain.obj"/>
<RESFILES value="RegSearch.res"/>
<IDLFILES value=""/>
<IDLGENFILES value=""/>
<DEFFILE value=""/>
<RESDEPEN value="$(RESFILES) FormMain.dfm"/>
<LIBFILES value=""/>
<LIBRARIES value=""/>
<SPARELIBS value="vcl.lib rtl.lib"/>
<PACKAGES value="vcl.bpi rtl.bpi dbrtl.bpi adortl.bpi vcldb.bpi vclx.bpi bdertl.bpi
vcldbx.bpi ibxpress.bpi dsnap.bpi cds.bpi bdecds.bpi qrpt.bpi teeui.bpi
teedb.bpi tee.bpi dss.bpi teeqr.bpi visualclx.bpi visualdbclx.bpi
dsnapcrba.bpi dsnapcon.bpi bcbsmp.bpi vclie.bpi xmlrtl.bpi inet.bpi
inetdbbde.bpi inetdbxpress.bpi inetdb.bpi nmfast.bpi webdsnap.bpi
bcbie.bpi websnap.bpi soaprtl.bpi dclocx.bpi dbexpress.bpi dbxcds.bpi
indy.bpi bcb2kaxserver.bpi MultilineTab6.bpi elpackB6.bpi rxctl6.bpi
rxdb6.bpi rxbde6.bpi OfficeVCL6.bpi tb2k_cb6.bpi FIBPlus_CB6.bpi
EhLibB60.bpi"/>
<PATHCPP value=".;"/>
<PATHPAS value=".;"/>
<PATHRC value=".;"/>
<PATHASM value=".;"/>
<DEBUGLIBPATH value="$(BCB)\lib\debug"/>
<RELEASELIBPATH value="$(BCB)\lib\release"/>
<LINKER value="ilink32"/>
<USERDEFINES value="_DEBUG"/>
<SYSDEFINES value="_RTLDLL;NO_STRICT;USEPACKAGES"/>
<MAINSOURCE value="RegSearch.cpp"/>
<INCLUDEPATH value=""E:\Program Files\Borland\CBuilder6\Projects";E:\dev\Registry;$(BCB)\include;$(BCB)\include\vcl;E:\prg6\DexExPS\Lib;E:\prg6\DexExPS\Sources"/>
<LIBPATH value=""E:\Program Files\Borland\CBuilder6\Projects";E:\dev\Registry;$(BCB)\Projects\Lib;$(BCB)\lib\obj;$(BCB)\lib;E:\prg6\FIBPlus52\sources;E:\prg6\FIBPlus52\sources\Editors;E:\prg6\DexExPS\Lib;E:\prg6\DexExPS\Sources"/>
<WARNINGS value="-w-par"/>
<OTHERFILES value=""/>
</MACROS>
<OPTIONS>
<IDLCFLAGS value="-I"E:\Program Files\Borland\CBuilder6\Projects" -IE:\dev\Registry
-I$(BCB)\include -I$(BCB)\include\vcl -IE:\prg6\DexExPS\Lib
-IE:\prg6\DexExPS\Sources -src_suffix cpp -D_DEBUG -boa"/>
<CFLAG1 value="-Od -H=$(BCB)\lib\vcl60.csm -Hc -Vx -Ve -X- -r- -a8 -b- -k -y -v -vi- -c
-tW -tWM"/>
<PFLAGS value="-$YD -$W -$O- -$A8 -v -JPHNE -M"/>
<RFLAGS value=""/>
<AFLAGS value="/mx /w2 /zd"/>
<LFLAGS value="-D"" -aa -Tpe -x -Gn -v"/>
<OTHERFILES value=""/>
</OPTIONS>
<LINKER>
<ALLOBJ value="c0w32.obj $(PACKAGES) Memmgr.Lib sysinit.obj $(OBJFILES)"/>
<ALLRES value="$(RESFILES)"/>
<ALLLIB value="$(LIBFILES) $(LIBRARIES) import32.lib cp32mti.lib"/>
<OTHERFILES value=""/>
</LINKER>
<FILELIST>
<FILE FILENAME="RegSearch.res" FORMNAME="" UNITNAME="RegSearch.res" CONTAINERID="ResTool" DESIGNCLASS="" LOCALCOMMAND=""/>
<FILE FILENAME="RegSearch.cpp" FORMNAME="" UNITNAME="RegSearch" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
<FILE FILENAME="FormMain.cpp" FORMNAME="Form1" UNITNAME="FormMain" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
</FILELIST>
<BUILDTOOLS>
</BUILDTOOLS>
<IDEOPTIONS>
[Version Info]
IncludeVerInfo=0
AutoIncBuild=0
MajorVer=1
MinorVer=0
Release=0
Build=0
Debug=0
PreRelease=0
Special=0
Private=0
DLL=0
Locale=1049
CodePage=1251
[Version Info Keys]
CompanyName=
FileDescription=
FileVersion=1.0.0.0
InternalName=
LegalCopyright=
LegalTrademarks=
OriginalFilename=
ProductName=
ProductVersion=1.0.0.0
Comments=
[Excluded Packages]
E:\PROGRA~1\Borland\CBUILD~2\Projects\Bpl\elpackB6.bpl=ElTree Lite
E:\Program Files\Borland\CBuilder6\Projects\Bpl\FibPdbms_b6.bpl=FibPdbms_b6
e:\program files\borland\cbuilder6\Bin\dclsoap60.bpl=Borland SOAP Components
[HistoryLists\hlIncludePath]
Count=3
Item0=$(BCB)\include;$(BCB)\include\vcl;E:\prg6\DexExPS\Lib;E:\prg6\DexExPS\Sources
Item1=$(BCB)\include;$(BCB)\include\vcl;E:\prg6\FIBPlus52\sources;E:\prg6\FIBPlus52\sources\Editors
Item2=$(BCB)\include;$(BCB)\include\vcl
[HistoryLists\hlLibraryPath]
Count=3
Item0=$(BCB)\lib\obj;$(BCB)\lib;E:\prg6\FIBPlus52\sources;E:\prg6\FIBPlus52\sources\Editors;E:\prg6\DexExPS\Lib;E:\prg6\DexExPS\Sources
Item1=$(BCB)\lib\obj;$(BCB)\lib;E:\prg6\FIBPlus52\sources;E:\prg6\FIBPlus52\sources\Editors
Item2=$(BCB)\lib\obj;$(BCB)\lib
[HistoryLists\hlDebugSourcePath]
Count=1
Item0=$(BCB)\source\vcl
[HistoryLists\hlConditionals]
Count=1
Item0=_DEBUG
[Debugging]
DebugSourceDirs=$(BCB)\source\vcl
[Parameters]
RunParams=
Launcher=
UseLauncher=0
DebugCWD=
HostApplication=
RemoteHost=
RemotePath=
RemoteLauncher=
RemoteCWD=
RemoteDebug=0
[Compiler]
ShowInfoMsgs=0
LinkDebugVcl=0
LinkCGLIB=0
[CORBA]
AddServerUnit=1
AddClientUnit=1
PrecompiledHeaders=1
[Language]
ActiveLang=
ProjectLang=
RootDir=
</IDEOPTIONS>
</PROJECT>
|
Форма FormMain
CODE |
object Form1: TForm1
Left = 192
Top = 138
Width = 696
Height = 480
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object sb: TStatusBar
Left = 0
Top = 434
Width = 688
Height = 19
Panels = <>
SimplePanel = False
end
object Panel1: TPanel
Left = 0
Top = 0
Width = 688
Height = 41
Align = alTop
Caption = 'Panel1'
TabOrder = 1
object Button1: TButton
Left = 4
Top = 12
Width = 75
Height = 25
Caption = 'Button1'
TabOrder = 0
OnClick = Button1Click
end
end
object t: TTreeView
Left = 0
Top = 41
Width = 329
Height = 393
Align = alLeft
Indent = 19
TabOrder = 2
end
end
|
CPP и H формы:
CODE |
//---------------------------------------------------------------------------
#ifndef FormMainH
#define FormMainH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include <ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TStatusBar *sb;
TPanel *Panel1;
TTreeView *t;
TButton *Button1;
void __fastcall Button1Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
void __fastcall BuildNode(TTreeNode *p, TRegistry *r, AnsiString asTopPath);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
|
CODE |
//---------------------------------------------------------------------------
#include <vcl.h>
#include <registry.hpp>
#pragma hdrstop
#include "FormMain.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TRegistry *r = new TRegistry();
r->RootKey = HKEY_LOCAL_MACHINE;
if (r->OpenKey("\\", false))
{
TTreeNode *n = t->Items->AddChild(NULL, "HKEY_LOCAL_MACHINE");
TStringList *s = new TStringList();
r->GetKeyNames(s);
for (int i = 0; i < s->Count; i++)
{
TTreeNode *c = t->Items->AddChild(n, s->Strings[i]);
AnsiString asCurrentPath = r->CurrentPath;
if ((r->OpenKey(asCurrentPath + "\\" + s->Strings[i], false)) &&
(r->HasSubKeys()))
{
BuildNode(c, r, asCurrentPath + "\\" + s->Strings[i]);
}
r->OpenKey(asCurrentPath + "\\", false);
}
}
r->RootKey = HKEY_CURRENT_USER;
if (r->OpenKey("\\", false))
{
TTreeNode *n = t->Items->AddChild(NULL, "HKEY_CURRENT_USER");
TStringList *s = new TStringList();
r->GetKeyNames(s);
for (int i = 0; i < s->Count; i++)
{
TTreeNode *c = t->Items->AddChild(n, s->Strings[i]);
AnsiString asCurrentPath = r->CurrentPath;
if ((r->OpenKey(asCurrentPath + "\\" + s->Strings[i], false)) &&
(r->HasSubKeys()))
{
BuildNode(c, r, asCurrentPath + "\\" + s->Strings[i]);
}
r->OpenKey(asCurrentPath + "\\", false);
}
}
delete r;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BuildNode(TTreeNode *p, TRegistry *r, AnsiString asTopPath)
{
TStringList *s = new TStringList();
r->GetKeyNames(s);
for (int i = 0; i < s->Count; i++)
{
TTreeNode *c = t->Items->AddChild(p, s->Strings[i]);
if ((r->OpenKey(asTopPath + "\\" + s->Strings[i], false)) &&
(r->HasSubKeys()))
{
BuildNode(c, r, asTopPath + "\\" + s->Strings[i]);
}
r->OpenKey(asTopPath + "\\", false);
}
}
|
И файл с функцией WinMain RegSearch.cpp
CODE |
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
USEFORM("FormMain.cpp", Form1);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0;
}
//---------------------------------------------------------------------------
|
|
|
olegenty |
Отправлено: 11.03.2004, 08:05 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
стоп. первый (файл проекта) не трогай, у меня там экзотических пакетов полно...
|
|
olegenty |
Отправлено: 11.03.2004, 08:10 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
Там одна реальная ошибка, я забыл
написать. сам напиши. но реестр сканируется на ура. в результате имеешь две заполненные ветки ключей: HKEY_LOCAL_MACHINE и HKEY_CURRENT_USER
|
|
Alex83 |
Отправлено: 11.03.2004, 10:20 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 25
|
Я долго мучался с твоим кодом но он у меня так и не за работал если не трудно прили исходник файла на KHRAM@ua.fm
плиз!!! |
|
olegenty |
Отправлено: 11.03.2004, 10:29 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
Отправил. Сообщи о результате.
|
|
Gedeon |
Отправлено: 11.03.2004, 10:42 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
QUOTE (olegenty @ 11/03/2004, 09:07) | стоп. первый (файл проекта) не трогай, у меня там экзотических пакетов полно... |
В этом случае самый простой вариат из файла проекта удалить все библиотеки, если они конечно не используются, билдер сам добавит все, что нужно.
В этом случае надо удалить следующее
QUOTE | vcl.bpi rtl.bpi dbrtl.bpi adortl.bpi vcldb.bpi vclx.bpi bdertl.bpi
vcldbx.bpi ibxpress.bpi dsnap.bpi cds.bpi bdecds.bpi qrpt.bpi teeui.bpi
teedb.bpi tee.bpi dss.bpi teeqr.bpi visualclx.bpi visualdbclx.bpi
dsnapcrba.bpi dsnapcon.bpi bcbsmp.bpi vclie.bpi xmlrtl.bpi inet.bpi
inetdbbde.bpi inetdbxpress.bpi inetdb.bpi nmfast.bpi webdsnap.bpi
bcbie.bpi websnap.bpi soaprtl.bpi dclocx.bpi dbexpress.bpi dbxcds.bpi
indy.bpi bcb2kaxserver.bpi MultilineTab6.bpi elpackB6.bpi rxctl6.bpi
rxdb6.bpi rxbde6.bpi OfficeVCL6.bpi tb2k_cb6.bpi FIBPlus_CB6.bpi
EhLibB60.bpi |
|
|
olegenty |
Отправлено: 11.03.2004, 11:06 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
Жаль, нельзя архивы прикладовать к сообщениям, я бы просто сюда положил...
|
|