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 :

Remplacement de caractères


Sujet :

Langage Delphi

  1. #41
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    SAlut
    On tourne un peu en boucle je trouve
    Si tu veux mettre le caractere ^ devant des caracteres particulier c'est ce code que je t'ai donné plus haut

    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
    uses StrUtils;
    var
           StrAccent, StrSpecial : String;
           I : Integer;
    begin
         StrAccent := '^&!'; //si tu dois egalement, comme c'est le cas je pense, mettre ^ dans la liste il faut imperativement le mettre en premiere (comme dans mon code exemple)
         //[...]
         Registre.RootKey:=HKEY_CURRENT_USER;
         Registre.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders',False);
         StrSpecial := AnsiLowerCase(ExpandFileName(Registre.ReadString (*****)))
         For I := 0 To Length(StrAccent) Do
              StrSpecial := AnsiReplaceStr(StrSpecial,StrAccent[i],'^' + StrAccent[i]); //On rajoute ^ devant tous les caractere
     
         Writeln(F, 'Set '  + MavariableDos + ' = ' + StrSpecial);
         readln
    End.
    Avec ca tu fait tes exemple suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set desktop=c:\documents and settings\a & moi\bureau
    doit devenir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set desktop=c:\documents and settings\a ^& moi\bureau
    un dernier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set desktop=c:\documents and settings\a ^ moi\bureau
    doit devenir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set desktop=c:\documents and settings\a ^^ moi\bureau
    Reste a resoudre le probleme de celui ci.

    Un autre exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set desktop=c:\documents and settings\moi & toi^^nous!\bureau
    doit devenir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set desktop=c:\documents and settings\moi ^& toi^>nous^!\bureau

    [Edit] Peux tu me confirmer que ^^ devient ^> et que ^^^^ ne fonctionne pas car pour moi sous dos ca fonctionne mais bon vu que tu utilise visiblement des fonction qui sont sensible a la synthax, dis moi
    Pour moi ca donnerai ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set desktop=c:\documents and settings\moi ^& toi^^^^nous^!\bureau
    Dans ce cas le code donné precedement resou normalement (je deviens prudent ) ton probleme, non ?
    J'attend ta reponse avant de modifier le code de la procedure, par ce que chez moi ^> ca ne fonctionne pas
    [/Edit]


    Je vais faire le necessaire dans le code pour que ce soit evolutif

    Tu ne veux vraiment pas donner les fonctions qui ne fonctionneraient pas avec les "", tu es dure en affaire toi dis moi .

    Bon je re plus tard avec le code
    ++

  2. #42
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Points : 11
    Points
    11
    Par défaut
    Salut!!

    Bon, je viens vous dire, que cela a fonctionné, mais là, ça ne veut plus rien savoir!!

    Voic un bout de 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
    program *****;
     
    {$APPTYPE CONSOLE}
     
    uses
      Windows,
      SysUtils,
      StrUtils,
      Registry;
     
     
    var
           StrAccent, StrSpecial : String;
           I : Integer;
           Registre : TRegistry;
           F : TextFile;
     
     
     
    begin
    ChDir(IncludeTrailingPathDelimiter(GetEnvironmentVariable('HOMEDRIVE')));
    AssignFile(f, extract.bat');
    Rewrite(f);
     
    Writeln(F, 'echo off');
    Writeln(F, '');
     
     
         Registre:=TRegistry.Create;
         StrAccent := '^&!'; //si tu dois egalement, comme c'est le cas je pense, mettre ^ dans la liste il faut imperativement le mettre en premiere (comme dans mon code exemple)
         //[...]
     
         Registre.RootKey:=HKEY_CURRENT_USER;
         Registre.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders',False);
         StrSpecial := AnsiLowerCase(expandfilename(Registre.ReadString ('desktop')));
         For I := 0 To Length(StrAccent) Do
              StrSpecial := AnsiReplaceStr(StrSpecial,StrAccent[i],'^'+ StrAccent[i]);
              Writeln(F, 'Set "****='+ StrSpecial+ '"');
     
    (.................)
    Registre.CloseKey;
         Registre.Free;
         CloseFile(F);
    end.
    Voilà, de cette façon, c'était bo,n, mais je ne sais ce que j'ai modifié, mais ça plante maintenant!



    Set desktop=c:\documents and settings\moi & toi^^nous!\bureau
    Doit bien devenir:

    Set desktop=c:\documents and settings\moi ^& toi^^^nous^!\bureau
    J'avais fait une erreur dans le Copier/coller..

  3. #43
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    SAlut
    Alors je ferais 2 remarques

    La premiere sur le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
         For I := 0 To Length(StrAccent) Do
              StrSpecial := AnsiReplaceStr(StrSpecial,StrAccent[i],'^'+ StrAccent[i]);
         Writeln(F, 'Set ****="'+ StrSpecial+ '"');
    Sur la derniere ligne j'ai deplacé le ", les quote devant entourer StrSpecial(enfin le chemin representé par)

    La deuxieme remarque:
    Elle est aussi lier au code si tu utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set MaVariableDos = "CheminRepertoir"
    , tu n'as pas besoin de modifier tes caracteres avant. Et donc si tu modifies tes caractere speciaux avant tu dois mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set MaVariableDos = CheminRepertoir
    Pour faire generaliste, le faite de mettre entre quote (ex "MonText") passe ce chemin a la fonction Dos, sans que celle ci essaie d'interpreter les caracteres. Sous Dos & ca n'est pas le Et Commercial c'est la fonction And, si tu veux qu'il la comprenne comme etant Et Commercial il faut que le mot qui la contient soit entre guillemet
    Exemple cd Toi&Moi Dos l'interprete comme etant cd Toi And Moi -> plantage
    cd "Toi&Moi" Dos l'interprete comme etant cd Toi&Moi -> rentre dans le repertoire

    On y arrive!

  4. #44
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Points : 11
    Points
    11
    Par défaut
    Re,

    Le soucis avec par exemple C:\Documents and Settings\&!^andréà

    Si j'attribue Desktop a ce chemin:

    Set "Desktop = C:\Documents and Settings\&!^andréà"
    Cela veut dire, que j'attribue C:\Documents and Settings\&!^andréà à Desktop.


    Et dans ce cas:

    Set Desktop="C:\Documents and Settings\&!^andréà"
    Là, j'attribue "C:\Documents and Settings\&!^andréà" a Desktop.

    Et cela plante, car le chemin ne doit être entouré de "".

    Sur mon post précédent, la synthaxe avait fonctionnée. mais j'ai du modifer un truc, et total, cela plante.

  5. #45
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Ok j'ai saisi
    Je regarde le code, tu as fais du pas a pas pour savoir d'ou vient l'erreur ?

    Comme ca je ne vois pas d'erreur par contre tu devrais mettre un try finally

    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
     
    Try     
       Registre.RootKey:=HKEY_CURRENT_USER;
       Registre.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders',False);
         StrSpecial := AnsiLowerCase(expandfilename(Registre.ReadString ('desktop')));
         For I := 0 To Length(StrAccent) Do
              StrSpecial := AnsiReplaceStr(StrSpecial,StrAccent[i],'^'+ StrAccent[i]);
              Writeln(F, 'Set "****='+ StrSpecial+ '"');
     
    (.................)
    Finally
       Registre.CloseKey;
       Registre.Free;
       CloseFile(F);
    End;
    Par ce que si ta clef existe pas ... ca doit pas aimer, c'est peut etre ce qui se passe d'ailleur

  6. #46
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Points : 11
    Points
    11
    Par défaut
    Re,

    pas d'erreur sous delphi, mais plutôt un erreur de synthaxe dans le DOS.

    Et dire que cette nuit ca marché...

  7. #47
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Tu sais ou ca plante sur ton code Dos ?
    met des pauses un peu partout histoire de faire du pas a pas sous Dos
    Pour commencer enleve la ligne echo Off sinon tu verra jamais rien

    Je dois retourner au turbin, si tu n'y arrives pas, je ne peux pas faire grand chose pour toi sans ton fichier batch, si tu ne veux pas le diffuser sur le site, envoie le moi sur mon adresse msn, je te promet de ne pas le diffuser, par ce que la sans code sans message d'erreur ... je suis navré mais je ne pourrais rien faire pour toi.
    a+
    Qwaz
    qwazerty**hotmail.com tu remplacera juste les ** par @, je met ca a cause des bots

  8. #48
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Points : 11
    Points
    11
    Par défaut
    Re,

    il n'y pas d'erreur a part entière sous DOS mais une erreur de synthaxe visiblement, vu que ca marche pas.

    Pour les tests sous DOS, t'inquiètes pas, j'ai bien viré le echo Off et j'ai insérer des pause pour voir mais pas moyen..

    Si cela peut t'aider, le .exe genére un .bat, qui sera utilisé par un autre .bat.

  9. #49
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Points : 11
    Points
    11
    Par défaut
    Re,

    Qwazerty 2tant donné, qu'il faut qu'on traite deux soucis, les accents et les caractères spéciaux, que diras tu, de coder la procédure de Cl@udius, qui gère les accents, avec la tienne qui gère les caractères spéciaux?

    Vu qu'il y a moins de lignes, ce sera plus simple nan?

  10. #50
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Points : 11
    Points
    11
    Par défaut
    RE,

    regharde, où j'ne suis, tu me diras si ca te palit:

    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
    64
    65
    66
    67
    68
    {$APPTYPE CONSOLE}
     
     
    uses
      Windows,
      SysUtils,
      StrUtils,
      Registry;
     
    var
      Registre : TRegistry;
      F: TextFile;
      I, E: Integer;
      StrAccent, StrSpecial : String;
     
    const
      HKCU_Keys: array[0..5] of string = (
        'Desktop', 'Favorites', 'Programs', 'Start Menu', 'Startup', 'Local AppData');
      HKCU_Sets: array[0..5] of string = (
        'desktop', 'favorites', 'startprg', 'startm', 'startup', 'dsculsad');
     
      HKLM_Keys: array[0..4] of string = (
        'Common Desktop', 'Common Favorites', 'Common Programs', 'Common Start Menu',
        'Common Startup');
      HKLM_Sets: array[0..4] of string = (
        'audesktop', 'aufavorites', 'austartprg', 'austartm', 'austartup');
     
    function ConvertirClef(const AValue: string): string;
    begin
      SetLength(result, Length(AValue));
      CharToOEM(PChar(AValue), PChar(result));
      result := AnsiLowercase(result);
    end;
     
    begin
      ChDir(IncludeTrailingPathDelimiter(GetEnvironmentVariable('HOMEDRIVE')));
     
      AssignFile(f, 'extract.bat');
      Rewrite(F);
      Writeln(F, 'echo off');
      Writeln(F, '');
     
      Registre := TRegistry.Create;
      try
        with registre do
        begin
          StrAccent := '^&!';
          RootKey := HKEY_CURRENT_USER;
          OpenKey('\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders',False);
          StrSpecial := AnsiLowerCase(ExpandFileName(Registre.ReadString (HKCU_Keys[i])));
     
     
          for I := Low(HKCU_Keys) to High(HKCU_Keys) do
            StrSpecial := AnsiReplaceStr(StrSpecial,StrAccent[i],'^' + StrAccent[i]);
            Writeln(F, 'Set "' + HKCU_Sets[i] + '=' + ConvertirClef(ReadString(StrSpecial)) + '"') ;
          CloseKey;
     
          RootKey := HKEY_LOCAL_MACHINE;
          OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders',False);
          for I := Low(HKLM_Keys) to High(HKLM_Keys) do
            Writeln(F, 'Set "' + HKLM_Sets[i] + '=' + ConvertirClef(ReadString(HKLM_Keys[i])) + '"');
          CloseKey;
        end;
      finally
        Registre.Free;
        CloseFile(F);
      end;
    end.

    Et ça:


    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
    64
    65
    66
    67
    {$APPTYPE CONSOLE}
     
     
    uses
      Windows,
      SysUtils,
      StrUtils,
      Registry;
     
    var
      Registre : TRegistry;
      F: TextFile;
      I, E: Integer;
      StrAccent : String;
     
    const
      HKCU_Keys: array[0..5] of string = (
        'Desktop', 'Favorites', 'Programs', 'Start Menu', 'Startup', 'Local AppData');
      HKCU_Sets: array[0..5] of string = (
        'desktop', 'favorites', 'startprg', 'startm', 'startup', 'dsculsad');
     
      HKLM_Keys: array[0..4] of string = (
        'Common Desktop', 'Common Favorites', 'Common Programs', 'Common Start Menu',
        'Common Startup');
      HKLM_Sets: array[0..4] of string = (
        'audesktop', 'aufavorites', 'austartprg', 'austartm', 'austartup');
     
    function ConvertirClef(const AValue: string): string;
    begin
      SetLength(result, Length(AValue));
      CharToOEM(PChar(AValue), PChar(result));
      result := AnsiLowercase(result);
    end;
     
    begin
      ChDir(IncludeTrailingPathDelimiter(GetEnvironmentVariable('HOMEDRIVE')));
     
      AssignFile(f, 'extract.bat');
      Rewrite(F);
      Writeln(F, 'echo off');
      Writeln(F, '');
     
      Registre := TRegistry.Create;
      try
        with registre do
        begin
          StrAccent := '&!';
          RootKey := HKEY_CURRENT_USER;
          OpenKey('\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders',False);
     
     
     
          for I := Low(HKCU_Keys) to High(HKCU_Keys) do
            Writeln(F, 'Set "' + HKCU_Sets[i] + '=' + ConvertirClef(ReadString(HKCU_Keys[i])+ StrAccent[i],'^'+ StrAccent[i] + '"')) ;
          CloseKey;
     
          RootKey := HKEY_LOCAL_MACHINE;
          OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders',False);
          for I := Low(HKLM_Keys) to High(HKLM_Keys) do
            Writeln(F, 'Set "' + HKLM_Sets[i] + '=' + ConvertirClef(ReadString(HKLM_Keys[i])) + '"');
          CloseKey;
        end;
      finally
        Registre.Free;
        CloseFile(F);
      end;
    end.

    Je n'ai rentré que pour la prmière clef, car pour la suite, c'est pas necessaire.

    Mais ca marche pas.. J'essaye de voir, mais c'est pas évident là

  11. #51
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Points : 11
    Points
    11
    Par défaut
    Re,

    J'ai essayé aussi comme ceci, mais rien ne se crée dans le .bat!


    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
    {$APPTYPE CONSOLE}
     
    uses
      Windows,
      SysUtils,
      StrUtils,
      Registry;
     
     
    var
           StrAccent, StrSpecial : String;
           I : Integer;
           Registre : TRegistry;
           F : TextFile;
     
     
    function ConvertirClef(const AValue: string): string;
    begin
      SetLength(result, Length(AValue));
      CharToOEM(PChar(AValue), PChar(result));
      result := AnsiLowercase(result);
    end;
     
     
     
     
     
    begin
    ChDir(IncludeTrailingPathDelimiter(GetEnvironmentVariable('HOMEDRIVE')));
    AssignFile(f, extract.bat');
    Rewrite(f);
     
    Writeln(F, 'echo off');
    Writeln(F, '');
     
     
         Registre:=TRegistry.Create;
         StrAccent := '&!'; //si tu dois egalement, comme c'est le cas je pense, mettre ^ dans la liste il faut imperativement le mettre en premiere (comme dans mon code exemple)
         //[...]
     
         Registre.RootKey:=HKEY_CURRENT_USER;
         Registre.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders',False);
         StrSpecial := AnsiLowerCase(expandfilename(Registre.ReadString ('desktop')));
         For I := 0 To Length(StrAccent) Do
              StrSpecial := AnsiReplaceStr(StrSpecial,StrAccent[i],'^' + StrAccent[i]);
              ConvertirClef(Registre.ReadString(StrSpecial));
              Writeln(F, 'Set "desktop='  + StrSpecial+ '"');
     
    (...)


    Ainsi que comme ça:


    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
    {$APPTYPE CONSOLE}
     
    uses
      Windows,
      SysUtils,
      StrUtils,
      Registry;
     
     
    var
           StrAccent, StrSpecial : String;
           I : Integer;
           Registre : TRegistry;
           F : TextFile;
     
     
    function ConvertirClef(const AValue: string): string;
    begin
      SetLength(result, Length(AValue));
      CharToOEM(PChar(AValue), PChar(result));
      result := AnsiLowercase(result);
    end;
     
     
    begin
    ChDir(IncludeTrailingPathDelimiter(GetEnvironmentVariable('HOMEDRIVE')));
    AssignFile(f, 'GetPaths.bat');
    Rewrite(f);
     
    Writeln(F, 'echo off');
    Writeln(F, '');
     
     
         Registre:=TRegistry.Create;
         StrAccent := '&!'; //si tu dois egalement, comme c'est le cas je pense, mettre ^ dans la liste il faut imperativement le mettre en premiere (comme dans mon code exemple)
         //[...]
     
         Registre.RootKey:=HKEY_CURRENT_USER;
         Registre.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders',False);
         StrSpecial := AnsiLowerCase(expandfilename(Registre.ReadString ('desktop')));
         For I := 0 To Length(StrAccent) Do
     
              StrSpecial := AnsiReplaceStr(StrSpecial,StrAccent[i],'^' + StrAccent[i]);
     
              Writeln(F, 'Set "desktop='  + ConvertirClef(Registre.ReadString(StrSpecial)) + '"');

  12. #52
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    SAlut
    Normal tu fais un readString en lui passant StrSpecial comme parametre... attention tu crack il est trop tard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ConvertirClef(Registre.ReadString(StrSpecial));
    a++

  13. #53
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Pour ne pas utiliser une TStringList ?

    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
     
    {$APPTYPE CONSOLE}
     
    uses
      Windows,
      SysUtils,
      StrUtils,
      Registry;
     
     
    var
           StrAccent, StrSpecial : String;
           I : Integer;
           Registre : TRegistry;
     
          lst : TStringList;
     
    function ConvertirClef(const AValue: string): string;
    begin
      SetLength(result, Length(AValue));
      CharToOEM(PChar(AValue), PChar(result));
      result := AnsiLowercase(result);
    end;
     
     
    begin
    ChDir(IncludeTrailingPathDelimiter(GetEnvironmentVariable('HOMEDRIVE')));
     
    lst := TStringList.Create;
    try
      lst.Add('echo off');
     
     
         Registre:=TRegistry.Create;
         StrAccent := '&!'; //si tu dois egalement, comme c'est le cas je pense, mettre ^ dans la liste il faut imperativement le mettre en premiere (comme dans mon code exemple)
         //[...]
     
         Registre.RootKey:=HKEY_CURRENT_USER;
         Registre.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders',False);
         StrSpecial := AnsiLowerCase(expandfilename(Registre.ReadString ('desktop')));
         For I := 0 To Length(StrAccent) Do
     
              StrSpecial := AnsiReplaceStr(StrSpecial,StrAccent[i],'^' + StrAccent[i]);
     
           lst.Add('Set "desktop='  + ConvertirClef(Registre.ReadString(StrSpecial)) + '"');
     
      lst.SaveToFile('extract.bat');
    finally
      lst.free;
    end;

  14. #54
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    SAlut
    Avec biensur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lst.Add('Set "desktop='  + ConvertirClef(StrSpecial) + '"');
    As tu trouvé ou se suitue ton erreur dans ton fichier Bat ?

  15. #55
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Points : 11
    Points
    11
    Par défaut
    Salut à tous,

    Pour le .bat, il n'y a pas de message d'erreur genéré. Mais y a une erreur, da,ns le sens ou cela ne fonctionne pas!

    Je commence a ne plus rien comprendre là...


    J'essaye a chaque fois toute les soltions que vous prposez, mais je n'y arrive pas..Je doit vraiment être null

  16. #56
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Et si tu nous montrais le résultat que te sort le programme (genre un .bat généré ^^)

  17. #57
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Citation Envoyé par Rayek Voir le message
    Et si tu nous montrais le résultat que te sort le programme (genre un .bat généré ^^)
    Ca fait 10 fois que je le demande mais ce doit etre secret defence

    Si tu ne nous aide pas a comprend ce qui ne fonctionne pas comment veux tu que l'on t'aide?

    Le code que tu as mis une fois la correction que je t'ai indiqué genere bien un fichier bat et si j'utilise le fichier bat qui ai ainsi generé, il fait son office en créant une variable sous dos....

    Si c'est autre chose dans ton bat qui ne fais pas ce que tu veux, faut nous dire ce que tu veux faire et comment tu fais actuellement , sinon ben... bon courrage.

    A++
    Qwaz

  18. #58
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 446
    Points : 5 867
    Points
    5 867
    Par défaut
    salut

    as tu essayé de changer les accents par le caractere générique ?

    @+ Phil

    [edit]
    tu as une erreur ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Writeln(F, 'Set "' + HKLM_Sets[i] + '=' + ConvertirClef(ReadString(HKLM_Keys[i])) + '"');
    la command set du dos n'a pas besoin de ""

  19. #59
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Re
    Bon j'avais ratté un ou 2 de tes messages
    Ok pour cumuler le passage en OEM proposé par Claudius et le code que je t'avais mis pour les caracteres speciaux.
    Je te joins le code que tu as mis, corrigé

    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    {$APPTYPE CONSOLE}
     
     
    uses
      Windows,
      SysUtils,
      StrUtils,
      Registry;
     
    var
      Registre : TRegistry;
      F: TextFile;
     
    const
      HKCU_Keys: array[0..5] of string = (
        'Desktop', 'Favorites', 'Programs', 'Start Menu', 'Startup', 'Local AppData');
      HKCU_Sets: array[0..5] of string = (
        'desktop', 'favorites', 'startprg', 'startm', 'startup', 'dsculsad');
     
      HKLM_Keys: array[0..4] of string = (
        'Common Desktop', 'Common Favorites', 'Common Programs', 'Common Start Menu',
        'Common Startup');
      HKLM_Sets: array[0..4] of string = (
        'audesktop', 'aufavorites', 'austartprg', 'austartm', 'austartup');
     
    function ConvertirClef(const AValue: string): string;
    Var StrAccent : String;
          I : Ineteger;
    begin
      //Passage CharToOEM (Claudius)
      SetLength(result, Length(AValue));
      CharToOEM(PChar(AValue), PChar(result));
     
      //Passage caractere speciaux + ^ devant (Qwaz)
      StrAccent := '^&!';
      For I := 0 To Length(StrAccent) Do
          result := AnsiReplaceStr(result,StrAccent[i],'^'+ StrAccent[i]);
     
      //Passage en nom cours(Rayek)  (je le met a la suite pour ne pas risquer de supprimer les ~ que Win va utiliser)
      result := ExtractShortPathName(result);
     
     
      result := AnsiLowercase(result);
    end;
     
    begin
      ChDir(IncludeTrailingPathDelimiter(GetEnvironmentVariable('HOMEDRIVE')));
     
      AssignFile(f, 'extract.bat');
      Rewrite(F);
      Writeln(F, 'echo off');
      Writeln(F, '');
     
      Registre := TRegistry.Create;
      try
        with registre do
        begin
          RootKey := HKEY_CURRENT_USER;
          OpenKey('\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders',False);
          for I := Low(HKCU_Keys) to High(HKCU_Keys) do
              Writeln(F, 'Set "' + HKCU_Sets[i] + '=' + ConvertirClef(ReadString(HKCU_Keys[i])) + '"') ;
          CloseKey;
     
          RootKey := HKEY_LOCAL_MACHINE;
          OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders',False);
          for I := Low(HKLM_Keys) to High(HKLM_Keys) do
              Writeln(F, 'Set "' + HKLM_Sets[i] + '=' + ConvertirClef(ReadString(HKLM_Keys[i])) + '"');
          CloseKey;
        end;
     
      finally
        Registre.Free;
        CloseFile(F);
      end;
    end.
    J'ai regroupé toutes les modifications de texte dans la function ConvertirClef
    J'ai modifié tes appelles a cette function, puisque tu passais des choses plutot bizard en parametre
    Le code est testé, il genere un .Bat qui une fois executé, cré toutes les variables en DOS

    [Edit]
    @Anapurna : cela fonction avec ou sans en faite, ca n'est pas utile je suis bien d'accord, mais c'est fonctionnelle tout de meme
    [/edit]

    [Edit2]
    Par contre en regardant les variables ainsi créées, je me demande si tu ferais pas bien de passer tes chemins en nom cours comme te l'avait conseillé Rayek si mes souvenirs sont bon, sachant que pas mal des chemins de Win deja enregistrés au demarrage le sont en mode cours, ce qui resoudré peut etre les problemes que tu as par la suite.
    Je le rajoute donc dans le code precedent
    [/edit2]

Discussions similaires

  1. Remplacement du caractère ?
    Par Mvu dans le forum ASP
    Réponses: 9
    Dernier message: 06/01/2005, 19h11
  2. Réponses: 11
    Dernier message: 01/12/2004, 20h09
  3. [CR] Chercher et remplacer un caractère dans 1 chaine
    Par franck.cvitrans dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 29/09/2004, 17h42
  4. Fonction permettant de remplacer des caractères
    Par PrinceMaster77 dans le forum ASP
    Réponses: 3
    Dernier message: 06/09/2004, 16h48
  5. Remplacer un caractère
    Par Mvu dans le forum ASP
    Réponses: 5
    Dernier message: 20/07/2004, 10h57

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