void __fastcall TRegAssociationsForm::FormActivate(TObject *Sender) { ValueListEditorAssoc->Strings->Clear(); TRegistry * reg = new TRegistry(); try { reg->RootKey = HKEY_LOCAL_MACHINE; reg->OpenKey("\\SOFTWARE\\Gis center\\Journal\\Associations", true); TStringList * val = new TStringList; try { reg->GetValueNames(val); for (int i = 0; i < val->Count; i++) ValueListEditorAssoc->InsertRow (val->Strings[i], reg->ReadString(val->Strings[i]), true); } __finally { safe_delete (val); // delete val; } reg->CloseKey(); } __finally { safe_delete (reg); // delete reg; } }
TStringList* TCommThread::GetAvailableDevicesNames(bool IncludeSerial, bool IncludeParallel, TStringList * AvaiableDevicesNames) { TRegistry *Registro = new TRegistry(); TStringList *StringsTemp = new TStringList(); int Indice; if (AvaiableDevicesNames!=NULL) AvaiableDevicesNames->Clear(); else AvaiableDevicesNames = new TStringList(); Registro->RootKey=HKEY_LOCAL_MACHINE; if(IncludeSerial==true) { StringsTemp->Clear(); Registro->OpenKey("hardware\\devicemap\\serialcomm",false); Registro->GetValueNames(StringsTemp); for (Indice=0;Indice<StringsTemp->Count;Indice++) AvaiableDevicesNames->Add(Registro->ReadString(StringsTemp->Strings[Indice])); Registro->CloseKey(); } if(IncludeParallel==true) { StringsTemp->Clear(); Registro->OpenKey("hardware\\devicemap\\parallel ports",false); Registro->GetValueNames(StringsTemp); for (Indice=0;Indice<StringsTemp->Count;Indice++) AvaiableDevicesNames->Add(ExtractFileName(Registro->ReadString(StringsTemp->Strings[Indice]))); Registro->CloseKey(); } AvaiableDevicesNames->Sort(); delete Registro; delete StringsTemp; return AvaiableDevicesNames; }
bool TRegistryStorage::Copy(TRegistryStorage * Storage) { TRegistry * Registry = Storage->FRegistry; bool Result = true; std::unique_ptr<TStrings> Names(new TStringList()); try__finally { rde::vector<uint8_t> Buffer(1024); Registry->GetValueNames(Names.get()); intptr_t Index = 0; while ((Index < Names->GetCount()) && Result) { UnicodeString Name = MungeStr(Names->GetString(Index), GetForceAnsi()); DWORD Size = static_cast<DWORD>(Buffer.size()); DWORD Type; int RegResult = 0; do { RegResult = ::RegQueryValueEx(Registry->GetCurrentKey(), Name.c_str(), nullptr, &Type, &Buffer[0], &Size); if (RegResult == ERROR_MORE_DATA) { Buffer.resize(Size); } } while (RegResult == ERROR_MORE_DATA); Result = (RegResult == ERROR_SUCCESS); if (Result) { RegResult = ::RegSetValueEx(FRegistry->GetCurrentKey(), Name.c_str(), 0, Type, &Buffer[0], Size); Result = (RegResult == ERROR_SUCCESS); } ++Index; } } __finally { /* delete Names; */ }; return Result; }