IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

lire dans la base de registre


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Speed41
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 718
    Par défaut lire dans la base de registre
    Bonjour,

    je voudrais lire des données dans la base de registre, voici le code que j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Var Registre : TRegistry;
    begin
      Registre:=TRegistry.Create; //Crée un objet TRegistry
      Registre.RootKey:=HKEY_LOCAL_MACHINE; //Définit la clé principale
      Registre.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\OEMInformation',true); {"OpenKey" ouvre une clé particulière (False signifie que la clé n'est pas crée si elle n'existe pas}
      nb_serie.Text:=Registre.ReadString('Manufacturer'); //Renvoie un string à partir du nom de la valeur
      Registre.CloseKey; //Ferme la clé
      Registre.Free; //Détruit l'objet
    Et rien n'est lu. J'ai cherché et j'ai trouvé qu'il pouvais y avoir une question de droit. Pour écrire Ok mais pour lire ?

    J'ai réussit à écrire dans la base de registre via Regedit (ajout de "Manufacturer"). Est ce que les droits ne sont pas les mêmes ?

    Voici le code que j'ai utilisé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Uses Registry;
     
    procedure TForm1.Button1Click(Sender: TObject);
    Var Registre : TRegistry;
    begin 
    //Récupère l'url de la page de démarrage
    Registre:=TRegistry.Create; //Crée un objet TRegistry
    Registre.RootKey:=HKEY_CURRENT_USER; //Définit la clé principale
    Registre.OpenKey('\Software\Microsoft\Internet Explorer\Main',False); {"OpenKey" ouvre une clé particulière (False signifie que la clé n'est pas crée si elle n'existe pas} 
    Edit1.Text:=Registre.ReadString('Start Page'); //Renvoie un string à partir du nom de la valeur
    Registre.CloseKey; //Ferme la clé
    Registre.Free; //Détruit l'objet
    end;
    Et ce code fonctionne mais la clé n'est pas la même

    http://delphipage.free.fr/registre.html


    Merci de vos lumières

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 933
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 933
    Par défaut
    OpenKey ouvre la clé en lecture/écriture ce qui peut provoquer un Access denied. Utilise OpenKeyReadOnly pour de la lecture seule.

    ps: pas besoin d'un CloseKey avant le Free

  3. #3
    Membre éclairé Avatar de Speed41
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 718
    Par défaut
    Ca marche pas non plus avec OpenKeyReadOnly

    Si j'ai pu ecrire avec Regedit c'est bien que j'ai les droits ?

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 933
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 933
    Par défaut
    Citation Envoyé par Speed41 Voir le message
    Si j'ai pu ecrire avec Regedit c'est bien que j'ai les droits ?
    En effet

    Sur ma station, je n'ai pas de Manufacturer dans la BdR. Es-tu sûr d'en avoir un ? Sinon tu ferais mieux de passer par WMI.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    uses
      SysUtils, Variants, ActiveX, WbemScripting_TLB;
     
    function GetWMIString(wmiClass, wmiProperty : string):string;
    var
      Locator:  ISWbemLocator;
      Services: ISWbemServices;
      SObject:  ISWbemObject;
      ObjSet:   ISWbemObjectSet;
      SProp:    ISWbemProperty;
      Enum:     IEnumVariant;
      Value:    Cardinal;
      TempObj:  OleVariant;
    begin
      try
        Locator  := CoSWbemLocator.Create;
        Services := Locator.ConnectServer('', 'root\cimv2', '', '', '','', 0, nil);
        ObjSet   := Services.ExecQuery('SELECT * FROM '+wmiClass, 'WQL', wbemFlagReturnImmediately and wbemFlagForwardOnly , nil);
        Enum     := ObjSet._NewEnum as IEnumVariant;
     
        while Enum.Next(1, TempObj, Value) = S_OK do
        begin
          SObject := IUnknown(tempObj) as ISWBemObject;
          SProp   := SObject.Properties_.Item(wmiProperty, 0);
     
          if VarIsNull(SProp.Get_Value)
          then Result := ''
          else Result := SProp.Get_Value;
        end;
     
      except
        result := '';
      end;
    end;
    et l'appel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Manufacturer := getWMIString('Win32_ComputerSystem', 'Manufacturer');
    FAQ WMI

  5. #5
    Membre éclairé Avatar de Speed41
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 718
    Par défaut
    Pour répondre à la question "Sur ma station, je n'ai pas de Manufacturer dans la BdR. Es-tu sûr d'en avoir un ?"

    Non j'en avais pas, je l'ai ajouté, il apparait bien dans la fenêtre Informations système général

    Voici ce que j'ai déjà recherché http://www.developpez.net/forums/d14...iquant-modele/

    Pour le reste je regarde

    Merci

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 933
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 933
    Par défaut
    Attention à la redirection (Wow6432Node) si tu es sur un système 64 bits.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Explication pour lire dans la base de registre
    Par davidc dans le forum Débuter
    Réponses: 7
    Dernier message: 09/03/2008, 15h26
  2. Lire dans la base de registre
    Par El-Diablo- dans le forum C++Builder
    Réponses: 5
    Dernier message: 27/06/2007, 16h22
  3. Réponses: 10
    Dernier message: 02/11/2006, 20h52
  4. [vb] Lire dans la base de registre
    Par ptitnico22 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 20/06/2006, 13h56
  5. Lire une donnée dans la base de registre
    Par K.othmane dans le forum Langage
    Réponses: 1
    Dernier message: 06/01/2006, 11h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo