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

Lazarus Pascal Discussion :

Lecture de clé de registre et problème de concaténation [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2013
    Messages : 15
    Points : 6
    Points
    6
    Par défaut Lecture de clé de registre et problème de concaténation
    Bonjour développeurs,

    J'utilise Windows 7, Lazarus version 1.0.12, FPC 2.6.2 et SVN 42478.
    Je travaille depuis plusieurs semaines sur un programme et j'ai découvert un problème, lorsque vient le temps de lire une clé de registre.

    Voici la portion du code qui me cause problème :
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    unit Unit1;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
       Forms, LCLType, Registry, ShellApi, ComCtrls, StdCtrls;
     
    type
     
      { TForm1 }
     
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { private declarations }
      public
        { public declarations }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.lfm}
     
    { TForm1 }
     
    // Execute FSX.exe
    procedure TForm1.Button1Click(Sender: TObject);
    var
      reg: TRegistry;
      str: string;
      exeFSX : string;
    begin                        // Allons chercher le chemin de FSX.exe
      reg := TRegistry.Create;
      reg.RootKey := HKEY_CURRENT_USER;
      reg.OpenKeyreadonly('Software\Microsoft\Microsoft Games\Flight Simulator\10.0');
      str := reg.ReadString('AppPath');
      reg.closekey;
      reg.free;
     
      exeFSX := (str + 'FSX.exe');
     
      // Executer FSX.exe  si retourne > 32 c'est qu'il y a erreur
      if ShellExecute(0,nil, PChar(exeFSX),nil,nil,SW_SHOWNORMAL) > 32 then
        begin
          Halt();
        end
      else
        Application.MessageBox('Unable to find FSX.exe!', 'Run FSX.exe', MB_ICONINFORMATION);
    end;
    end.
    Lorsque je fais appel à cette clé de registre en particulier, la concaténation de cette ligne de code ne fonctionne plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      exeFSX := (str + 'FSX.exe');
    Cela fait une bonne semaine que je cherche à solutionner ce problème, mais sans succès.

    Avez-vous déjà rencontré ce genre de situation ?
    Est-ce un bogue avec Lazarus ?

    Merci de votre support.

  2. #2
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 726
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 726
    Points : 15 126
    Points
    15 126
    Par défaut
    Salut,
    Citation Envoyé par MikeEagle Voir le message
    (...) Lorsque je fais appel à cette clé de registre en particulier, la concaténation de cette ligne de code ne fonctionne plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      exeFSX := (str + 'FSX.exe');
    Déjà tu aurais pu nous dire ce que vaut ta variable "exeFSX", avec un bête ShowMessage par exemple.

    Ensuite, est-ce que ça ne serait pas tout simplement un petit oubli ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      exeFSX := str + '\'  + 'FSX.exe';
    Mais sans l'info du ShowMessage, c'est un peu impossible de deviner...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2013
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Salut,


    Déjà tu aurais pu nous dire ce que vaut ta variable "exeFSX", avec un bête ShowMessage par exemple.

    Ensuite, est-ce que ça ne serait pas tout simplement un petit oubli ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      exeFSX := str + '\'  + 'FSX.exe';
    Mais sans l'info du ShowMessage, c'est un peu impossible de deviner...

    Salut,

    Voici plus d'information:
    La valeur retournée par str := reg.ReadString('AppPath'); est le chemin d'accès et le résultat est bon et c'est

    F:\Microsoft Flight Simulator X\

    Je fait tout simplement ajouter FSX.exe à cette chaine de caractère ce qui devrait me donner pour exeFSX (F:\Microsoft Flight Simulator X\FSX.exe).
    Sauf que pour une raison que je n'arrive pas à m'expliquer la concaténation ne fonctionne pas et le résultat est F:\Microsoft Flight Simulator X\

    Je commence à croire que c'est un petit bug!

    J'espère que ça pourra aider.

    Merci.

  4. #4
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 726
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 726
    Points : 15 126
    Points
    15 126
    Par défaut
    Citation Envoyé par MikeEagle Voir le message
    Je fais tout simplement ajouter FSX.exe à cette chaine de caractère ce qui devrait me donner pour exeFSX (F:\Microsoft Flight Simulator X\FSX.exe).
    As-tu mis un ShowMessage comme je te l'ai suggéré ?
    Citation Envoyé par MikeEagle Voir le message
    Sauf que pour une raison que je n'arrive pas à m'expliquer la concaténation ne fonctionne pas et le résultat est F:\Microsoft Flight Simulator X\
    Le résultat de quoi ?
    As-tu mis un ShowMessage comme je te l'ai suggéré ?

    Citation Envoyé par MikeEagle Voir le message
    Je commence à croire que c'est un petit bug !
    Et moi je crois que puisque ta chaîne contient des espaces, c'est la fonction ShellExecute qui s'embrouille, à cause de ces espaces.
    Peut-être qu'avec un exeFSX := '"' + str + 'FSX.exe' + '"'; ça devrait aller mieux.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  5. #5
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    ou des #0 dans str ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2013
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Jipété Voir le message
    As-tu mis un ShowMessage comme je te l'ai suggéré ?

    Le résultat de quoi ?
    As-tu mis un ShowMessage comme je te l'ai suggéré ?



    Et moi je crois que puisque ta chaîne contient des espaces, c'est la fonction ShellExecute qui s'embrouille, à cause de ces espaces.
    Peut-être qu'avec un exeFSX := '"' + str + 'FSX.exe' + '"'; ça devrait aller mieux.
    Les informations concernant les résultats proviennents des ShowMessage.
    Je ne peut malheureusement pas mettre de capture d'écran.
    Je vais mettre des commentaires dans le code qui représente les résultats

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    unit Unit1;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
       Forms, LCLType, Registry, ShellApi, ComCtrls, StdCtrls, Dialogs;
     
    type
     
      { TForm1 }
     
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { private declarations }
      public
        { public declarations }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.lfm}
     
    { TForm1 }
     
    // Execute FSX.exe
    procedure TForm1.Button1Click(Sender: TObject);
    var
      reg: TRegistry;
      str: string;
      exeFSX : string;
    begin                        // Allons chercher le chemin de FSX.exe
      reg := TRegistry.Create;
      reg.RootKey := HKEY_CURRENT_USER;
      reg.OpenKeyreadonly('Software\Microsoft\Microsoft Games\Flight Simulator\10.0');
      str := reg.ReadString('AppPath');
      reg.closekey;
      reg.free;
     
      ShowMessage('str = ' + str);    // Résultat donne  str = F:\Microsoft Flight Simulator X\
     
      exeFSX := '"' + str + 'FSX.exe' + '"';   //  ou exeFSX := (str + 'FSX.exe'); donne le même résultat
     
      ShowMessage('str + FSX.exe = ' + exeFSX); // Résultat donne  str + FSX.exe = F:\Microsoft Flight Simulator X\
     
      // Executer FSX.exe  si retourne > 32 c'est qu'il y a erreur
      if ShellExecute(0,nil, PChar(exeFSX),nil,nil,SW_SHOWNORMAL) > 32 then
        begin
          Halt();
        end
      else
        Application.MessageBox('Unable to find FSX.exe!', 'Run FSX.exe', MB_ICONINFORMATION);
    end;
    end.

    Par contre, la concaténation fonctionne très bien si je mets en commentaire la partie qui traite le régistre et j'assigne une valeure à str.
    Voila le code
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    unit Unit1;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
       Forms, LCLType, Registry, ShellApi, ComCtrls, StdCtrls, Dialogs;
     
    type
     
      { TForm1 }
     
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { private declarations }
      public
        { public declarations }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.lfm}
     
    { TForm1 }
     
    // Execute FSX.exe
    procedure TForm1.Button1Click(Sender: TObject);
    var
      reg: TRegistry;
      str: string;
      exeFSX : string;
    begin                        // Allons chercher le chemin de FSX.exe
    {
      reg := TRegistry.Create;
      reg.RootKey := HKEY_CURRENT_USER;
      reg.OpenKeyreadonly('Software\Microsoft\Microsoft Games\Flight Simulator\10.0');
      str := reg.ReadString('AppPath');
      reg.closekey;
      reg.free;
    }
     
      str := 'F:\Microsoft Flight Simulator X\';
      ShowMessage('str = ' + str);    // Résultat donne  str = F:\Microsoft Flight Simulator X\
     
      exeFSX := (str + 'FSX.exe');
     
      ShowMessage('str + FSX.exe = ' + exeFSX); // Résultat donne  str + FSX.exe = F:\Microsoft Flight Simulator X\FSX.exe
     
      // Executer FSX.exe  si retourne > 32 c'est qu'il y a erreur
      if ShellExecute(0,nil, PChar(exeFSX),nil,nil,SW_SHOWNORMAL) > 32 then
        begin
          Halt();
        end
      else
        Application.MessageBox('Unable to find FSX.exe!', 'Run FSX.exe', MB_ICONINFORMATION);
    end;
    end.
    Merci.

  7. #7
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    Que donne Length(str) ? Est-ce compatible avec le nombre de caractères affichés ? Varie-t-elle après la concaténation ? Le problème vient pê du transtypage en PChar pour le ShellExecute qui l'arrête au premier #0 ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  8. #8
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 726
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 726
    Points : 15 126
    Points
    15 126
    Par défaut
    Citation Envoyé par tourlourou Voir le message
    Que donne Length(str) ?
    Est-ce compatible avec le nombre de caractères affichés ?
    Varie-t-elle après la concaténation ?
    Salut Yves,

    Oui, c'est dans cette direction qu'il faut creuser, àmha, puisque
    Citation Envoyé par MikeEagle Voir le message
    ShowMessage('str + FSX.exe = ' + exeFSX); // Résultat donne str + FSX.exe = F:\Microsoft Flight Simulator X\
    Effectivement, c'est comme s'il y avait un (ou des) #0 à la fin de la chaîne str !


    Citation Envoyé par MikeEagle Voir le message
    Par contre, la concaténation fonctionne très bien si je mets en commentaire la partie qui traite le régistre et j'assigne une valeure à str.
    Et dans ce contexte, tu peux lancer ton jeu ? Tu ne nous le dis pas...
    Si "non", faudra voir ça
    Citation Envoyé par tourlourou Voir le message
    Le problème vient pê du transtypage en PChar pour le ShellExecute qui l'arrête au premier #0 ?
    et mon histoire de doubles quotes.
    Je barre car je viens de tester avec D7 sous w2k : ça lance sans problème un exe avec des espaces dans le chemin, donc pour tourlourou.


    Euh, c'est pas top, ce code :
    Citation Envoyé par MikeEagle Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      // Executer FSX.exe  si retourne > 32 c'est qu'il y a erreur
      if ShellExecute(0,nil, PChar(exeFSX),nil,nil,SW_SHOWNORMAL) > 32 then
        begin
          Halt();
        end
      else // on devrait être bon pour l'exécution,
        // alors pourquoi ce "Unable to find..." ?
        Application.MessageBox('Unable to find FSX.exe!', 'Run FSX.exe', MB_ICONINFORMATION);
    Et y a une grosse bourde : l'erreur c'est inférieur ou égal à 32 ! Extrait de l'aide "Win32 Programmer's Reference" à propos de ShellExecute :
    If the function fails, the return value is an error value that is less than or equal to 32.
    Une info :
    Citation Envoyé par MikeEagle Voir le message
    Je ne peux malheureusement pas mettre de capture d'écran.
    Ctrl-C quand la fenêtre est affichée, et tu peux récupérer tout le texte pour le coller ailleurs
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2013
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Je constate le même problème.
    Lorsque le code pour accéder au registre est actif, la longueur de la chaîne de caractère est érronée.
    Si je mets le code en commentaire et j'assigne une valeur à str, les longueurs des chaînes de caractères sont bonnes.

    Voici les captures des ShowMessages :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShowMessage('str = ' + str);
    str = F:\Microsoft Flight Simulator X\
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShowMessage('Longueur str = ' +  IntToStr(Length(str)));
    Longueur str = 259
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShowMessage('str + FSX.exe = ' + exeFSX);
    str + FSX.exe = F:\Microsoft Flight Simulator X\
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShowMessage('Longueur exeFSX = ' +  IntToStr(Length(exeFSX)));
    Longueur exeFSX = 266
    Avec le code d'accès au régistre en commentaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    str = F:\Microsoft Flight Simulator X\
    Longueur str = 32
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    str + FSX.exe = F:\Microsoft Flight Simulator X\FSX.exe
    Longueur exeFSX = 39
    Il y a donc un problème lorsque le code suivant est actif :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      reg := TRegistry.Create;
      reg.RootKey := HKEY_CURRENT_USER;
      reg.OpenKeyreadonly('Software\Microsoft\Microsoft Games\Flight Simulator\10.0');
      str := reg.ReadString('AppPath');
      reg.closekey;
      reg.free;
    Il semble que le programme ne puisse plus évaluer les opérations sur les strings !!!!!!

    Le but est d'exécuter le programme FSX.exe à partir ce cet outil.

    Merci.

    Voilà....

  10. #10
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 726
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 726
    Points : 15 126
    Points
    15 126
    Par défaut
    Citation Envoyé par MikeEagle Voir le message
    Voici les captures des ShowMessages:
    Pas cool, t'aurais pu éditer un peu (virer tous ces WindowTitle, OK, etc.) au lieu de copier/coller brut de fonderie, style
    ShowMessage('str = ' + str); ---> str = F:\Microsoft Flight Simulator X\
    Parce que comme ça c'est franchement décourageant à lire
    Je te laisse faire le reste, tu as un bouton "Éditer".

    Citation Envoyé par MikeEagle Voir le message
    Le but est d'éxécuter le programme FSX.exe à partir ce cet outil.
    On avait bien compris
    Mais on n'y est pas encore : faut se concentrer sur ce problème de longueur de chaînes.
    Et tu as sûrement un souci avec les WideStrings. Faudrait peut-être voir avec UTF8ToAnsi(str);
    Regarde l'aide sur cette fonction.

    On avance !
    Mais je ne peux rien tester, mon Lazarus tourne sous Linux, et dans mon w2k virtualisé y a pas FS...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  11. #11
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    Jipété (coucou !) n'a pas tort !
    Problème d'UTF8 ? Pourquoi pas.
    Si la longueur de la chaîne n'a rien à voir avec celle affichée, il faudrait pê essayer autre chose qu’un ShowMessage pour savoir ce qui s'y cache !
    Tu peux aussi parcourir la chaîne caractère par caractère et l'ajouter à une autre chaîne s'il n'est pas nul.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  12. #12
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 726
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 726
    Points : 15 126
    Points
    15 126
    Par défaut
    Yop !
    Citation Envoyé par tourlourou Voir le message
    Problème d'UTF8 ? Pourquoi pas.
    J'ai proposé ça hier soir mais je ne suis pas du tout sûr ! As-tu vu les valeurs renvoyées par Length(str) ? Truc de ouf !

    En fait, ce que MikeEagle devrait faire, c'est se positionner avec Regedit sur la clé qui va bien puis "clic droit / exporter" et enregistrer le fichier qqpart, puis examiner ce fichier avec le Bloc-notes (et si c'est pas trop gros, éventuellement copier/coller ici la string concernée).

    Je suspecte une blague dans la BdR (ça n'est probablement pas une bête string...) mais ça fait longtemps que je n'ai plus joué avec, et sous Linux je risque pas
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  13. #13
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    Je viens de faire des tests avec ton code, pour 3 clefs, sans problème. Mais je n'ai pas FSX non plus...
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2013
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    J'ai refait le test et les opérations sur les strings ne fonctionnent toujours pas lorsque fait appel à cette clé de registre.

    J'ai donc dumper la clé, détruit et recréé AppPath et pour une raison inconnue maintenant les opérations sur les strings fonctionnent!!!!!!

    Voici le dump avant la recréation de la clé AppPath

    [HKEY_CURRENT_USER\Software\Microsoft\Microsoft Games\Flight Simulator\10.0]
    "FIRSTRUN"=dword:00000001
    "AppPath"="F:\\Microsoft Flight Simulator X\\"
    "MicrosoftAppDataComponent"=dword:00000001
    "FsxCfgExtraCache"=dword:00000001
    "FsxStandardXmlExtraCache"=dword:00000001


    Voici le dump après la recréation de la clé AppPath:

    [HKEY_CURRENT_USER\Software\Microsoft\Microsoft Games\Flight Simulator\10.0]
    "FIRSTRUN"=dword:00000001
    "AppPath"="F:\\Microsoft Flight Simulator X\\"
    "MicrosoftAppDataComponent"=dword:00000001
    "FsxCfgExtraCache"=dword:00000001
    "FsxStandardXmlExtraCache"=dword:00000001


    Je trouve ça quand même inquiétant que le compilateur réagisse comme ça sans même soulever d'erreur.
    Il cesse tout simplement d'exécuter les instructions sur les strings sans raison valable!!!!!!!!


    Bon, est-ce que ça vaut la peine de continuer d'investiguer le problème pour la communauté Lazarus?

    Ecore Merci pour votre support.

  15. #15
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 726
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 726
    Points : 15 126
    Points
    15 126
    Par défaut
    Salut,
    Citation Envoyé par MikeEagle Voir le message
    J'ai refait le test et les opérations sur les strings ne fonctionnent toujours pas lorsque fait appel à cette clé de registre.
    Si si, les opérations fonctionnent : on t'a demandé des ShowMessage (au passage, merci pour l'édition ), si tu as lu attentivement ce que tu as posté, tu auras noté que la string de base avait une longueur de 259, et qu'en lui rajoutant "FSX.exe" la longueur passait à 266 : c'est juste !
    La bonne question est : pourquoi 259, quand ça aurait dû être environ 30 ?

    Citation Envoyé par MikeEagle Voir le message
    J'ai donc dumpé la clé, détruit et recréé AppPath et pour une raison inconnue maintenant les opérations sur les strings fonctionnent !
    La raison n'est pas inconnue : tu as supprimé une clé de 259 de longueur et tu l'as remplacée par une d'environ 30.
    Le problème, c'est qu'au lieu de poster l'extraction (clic droit / exporter comme je l'avais demandé), tu as détruit la cause de l'erreur : on ne saura jamais (sauf si ça revient, peut-être à la suite d'une réinstall par exemple).
    Dommage...

    Citation Envoyé par MikeEagle Voir le message
    Je trouve ça quand même inquiétant que le compilateur réagisse comme ça sans même soulever d'erreur.
    Il cesse tout simplement d'exécuter les instructions sur les strings sans raison valable !
    Erreur de déduction : la clé était fausse mais le programme (le compilateur n'a rien à voir là-dedans) travaillait normalement : 259 + 7 = 266 !

    Citation Envoyé par MikeEagle Voir le message
    Bon, est-ce que ça vaut la peine de continuer d'investiguer le problème pour la communauté Lazarus?
    Effectivement, maintenant que la preuve est détruite, l'enquête est terminée.

    Mais en résumé, Lazarus n'avait rien à voir dans cette affaire : tu aurais écrit le même programme en VB ou en C, tu aurais eu le même problème. L'errreur était dans la clé, pas dans le prog qui la traitait.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

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

Discussions similaires

  1. [Débutant] Lecture de clé de registre d'un ordinateur distant
    Par Faufoll dans le forum VB.NET
    Réponses: 11
    Dernier message: 16/05/2014, 14h51
  2. probleme de lecture de DVD mais pas de problème pour les CD !
    Par littlepierre dans le forum Composants
    Réponses: 2
    Dernier message: 02/08/2009, 12h06
  3. Réponses: 0
    Dernier message: 27/04/2009, 16h27
  4. Réponses: 2
    Dernier message: 25/10/2007, 13h56
  5. Probleme de lecture de clés de registre
    Par Mac Twist dans le forum MFC
    Réponses: 1
    Dernier message: 06/05/2006, 19h00

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