Comment lire la Valeur par Défaut de la Clé de Registre
Je vais avoir un Delphi XE2 projet de travailler sur quelque chose avec une clé de registre. J'ai donc défini les codes suivants :
procedure TMainForm.BitBtn01Click(Sender: TObject);
var
RegistryEntry: TRegistry;
begin
RegistryEntry := TRegistry.Create(KEY_READ or KEY_WOW64_64KEY);
RegistryEntry.RootKey:= HKEY_LOCAL_MACHINE;
if (not RegistryEntry.KeyExists('Software\MyCompanyName\MyName\')) then
begin
RegistryEntry.Access:= KEY_WRITE or KEY_WOW64_64KEY;
RegistryEntry.OpenKey('Software\MyCompanyName\MyName\',True);
RegistryEntry.WriteString('', 'MyFirstProject');
end
else
begin
Memo01.Lines.Add(RegistryEntry.ReadString('(Default)')); //Not Working
Memo01.Lines.Add(RegistryEntry.ReadString('')); //Not Working
Memo01.Lines.Add(RegistryEntry.ReadString('@')); //Not Working
end;
RegistryEntry.CloseKey();
RegistryEntry.Free;
end;
Mon obligation est de vérifier la Valeur par Défaut de "MyName", et de montrer en Memo01. Mais rien n'est heppening. J'ai donc essayé une autre manière comme suit :
procedure TMainForm.BitBtn01Click(Sender: TObject);
var
RegistryEntry: TRegistry;
RegistryString: string;
begin
RegistryEntry := TRegistry.Create(KEY_READ or KEY_WOW64_64KEY);
RegistryEntry.RootKey:= HKEY_LOCAL_MACHINE;
if (not RegistryEntry.KeyExists('Software\MyCompanyName\MyName\')) then
begin
RegistryEntry.Access:= KEY_WRITE or KEY_WOW64_64KEY;
RegistryEntry.OpenKey('Software\MyCompanyName\MyName\',True);
RegistryEntry.WriteString('', 'MyFirstProject');
end
else
begin
RegistryString := RegistryEntry.ReadString('(Default)'); //Not Working
RegistryString := RegistryEntry.ReadString(''); //Not Working
RegistryString := RegistryEntry.ReadString('@'); //Not Working
Memo01.Lines.Add(RegistryString);
end;
RegistryEntry.CloseKey();
RegistryEntry.Free;
end;
Mais il n'est pas de travail.
Q: Avez-vous essayé de RegQueryValueEx(")? Une chaîne vide (
Pas de pas de. Je n'ai pas essayé RegQueryValueEx. Oui tout est concernant Valeur par Défaut.
Mais, @Rubi, je vous ai dit ce yesterday. À deux reprises.
Ce genre de programme avez-vous que ressent le besoin de revendiquer des droits élevés à chaque fois qu'il s'exécute, juste de sorte qu'il peut écrire HKLM la première fois qu'il fonctionne?
''
) devrait être tout ce dont vous avez besoin. Q: Êtes-vous sûr que cette touche est une valeur par défaut? Pouvez-vous le voir dans RegEdit?Pas de pas de. Je n'ai pas essayé RegQueryValueEx. Oui tout est concernant Valeur par Défaut.
Mais, @Rubi, je vous ai dit ce yesterday. À deux reprises.
Ce genre de programme avez-vous que ressent le besoin de revendiquer des droits élevés à chaque fois qu'il s'exécute, juste de sorte qu'il peut écrire HKLM la première fois qu'il fonctionne?
OriginalL'auteur Rubi Halder | 2013-04-23
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de Openkey dans votre partie.
Assurez-vous de vérifier la valeur de retour de
OpenKey()
de l'échec avant d'appelerReadString()
ouWriteString()
, ou bien ils peuvent déclencher des exceptions si la clé n'est pas ouvert.En effet, la norme de l'idiome est
if OpenKey... then
OriginalL'auteur bummi
Vous pouvez envisager d'utiliser la clé de registre HKEY_CURRENT_USER au lieu de HKEY_LOCAL_MACHINE.
Dans Vista/7/8, à moins que le programme est exécuté à l'aide de droits d'administrateur, vous n'avez pas réellement obtenir HKEY_LOCAL_MACHINE, vous obtenez un virtualisé emplacement. Essentiellement, Windows vous donne quelque chose que seul l'utilisateur peut voir.
À l'aide de HKEY_LOCAL_MACHINE seulement conduit à des maux de tête plus tard. Windows a été de verrouillage vers le bas.
OriginalL'auteur Ben C