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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 718
    Points : 210
    Points
    210
    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 683
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 683
    Points : 13 092
    Points
    13 092
    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 actif Avatar de Speed41
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 718
    Points : 210
    Points
    210
    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 683
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 683
    Points : 13 092
    Points
    13 092
    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 actif Avatar de Speed41
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 718
    Points : 210
    Points
    210
    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 683
    Détails du profil
    Informations personnelles :
    Localisation : Autre

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 718
    Points : 210
    Points
    210
    Par défaut
    oh la la je suis perdu heu non totalement perdu
    c'est quoi le "Wow6432Node" ???

    Et heu je n'ai pas bien compris comment installé le WMI, comment fait-on pour importer une librairie ?

    Désolé mais je n'ai pas un très grand niveau et ça devient super flou

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 683
    Points : 13 092
    Points
    13 092
    Par défaut
    Lorsque tu lis HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OEMInformation depuis ton soft et puisqu'il est compilé en 32 bits, l'OS 64 bits va automatiquement rediriger les accès sous HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\OEMInformation. Par Regedit, c'est là que tu dois effectivement écrire ta clé.

    Pour installer une bibliothèque de types, menu Composants -> Importer un composant -> Importer un bibliothèque de types puis sélectionner Microsoft WMI Scipting.

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 718
    Points : 210
    Points
    210
    Par défaut
    Bonjour,

    Merci pour ton aide. Après discutions nous avons décide de ne pas mettre ces infos dans la base de registre.
    Nota : HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\OEMInformation marche pas non plus

    Par contre je ne laisse pas tombé l'installation d'une bibliothèque.

    J'ai regardé et je n'ai pas "Importé un composant" (juste "importé un contrôle active X"). Et en cherchant dans tous les menus Composants je n'ai pas " Importer un bibliothèque de types". Ai-je loupé quelque chose ?

    Merci de ton aide

  10. #10
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 385
    Points : 2 999
    Points
    2 999

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 718
    Points : 210
    Points
    210
    Par défaut
    Super Merci

+ 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