W funkcji CreateKey należy podać pełną ścieżkę albo nie używać tej funkcji i w funkcji OpenKey podać true zamiast false.
Nic nie trzeba... kod jest poprawny, przecież napisałem, że go użyłem (testowałem) i u mnie utworzyło klucz, ale nie o nazwie System, gdyż taka nazwa klucza już istniała w podanej lokalizacji, lecz z powodzeniem utworzyłem w tej lokalizacji klucz o nazwie System2.
Jeżeli próbujesz utworzyć klucz w rejestrze w systemie Vista, to z tego co mi wiadomo, bez nadania specjalnych uprawnień programowi n ie uda się to Tobie.
W funkcji CreateKey należy podać pełną ścieżkę
Funkcja CreateKey oczekuje wartości typu String i nie całego drzewa ("pełnej ścieżki)", gdyż w przypadku klasy TRegistry najpierw otwiera się ROOT KEY, potem za pomocą funkcji OpenKey otwiera się drzewo kluczy, a drugi parametr tej funkcji decyduje, o tym czy funkcja ma tworzyć klucz jeżeli nie istnieje, przy false klucz nie zostanie utworzony, a przy true zostanie, jednak nie odnosi się to w żaden sposób d funkcja CreateKey.
Tak wiec klucz System2 można utworzyć na dwa różne sposoby, jeden z wykorzystaniem funkcji CreateKey, a drugi z wykorzystaniem tylko funkcji OpenKey z wartością true w drugim argumencie:
- Kod: Zaznacz cały
TRegistry *Rejestr = new TRegistry();
Rejestr->RootKey = HKEY_CURRENT_USER;
Rejestr->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Policies", false);
Rejestr->CreateKey("System2");
delete Rejestr;
lub:
- Kod: Zaznacz cały
TRegistry *Rejestr = new TRegistry();
Rejestr->RootKey = HKEY_CURRENT_USER;
Rejestr->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System2", true); // koniecznie true
delete Rejestr;
Klucze w rejestrze można jednak tworzyć tylko na kontach z uprawnieniami administratora, czyli nie utworzy klucza program który został uruchomiony na koncie Gościa lub na koncie użytkownika z ograniczeniami.