Bonjour,
Il semble que GetShortPathName ne fonctionne pas avec des fichiers accentués (ça me renvoie une chaine vide). Quelqu'un a-t-il une solution ?
Merci,
Vincent
Version imprimable
Bonjour,
Il semble que GetShortPathName ne fonctionne pas avec des fichiers accentués (ça me renvoie une chaine vide). Quelqu'un a-t-il une solution ?
Merci,
Vincent
Peut-être comme ceci (avec Ret déclaré en WideString);
Code:
1
2
3
4
5
6 try SetFileApisToOEM; GetShortPathNameW(PWideChar(Filename), PWideChar(Ret), MAX_PATH); finally SetFileApisToANSI; end;
Bonsoir,
Merci, mais ça ne semble pas fonctionner, ça retourne toujours une chaîne vide même si ce n'est pas accentué.
Merci en tout cas pour l'idée, je vais creuser,
Vincent
EDIT : Je suis sous Lazarus et non Delphi...
Alors que dirais-tu de déplacer ta discussion du forum Delphi vers le forum Lazarus ?
Mince, désolé, je n'avais pas vu qu'il y avait un forum spécifique pour Lazarus :(
Toutes mes excuses. Est ce qu'un modérateur peut supprimer ou déplacer ce post ?
Vincent
Merci pour le déplacement, pour préciser mon problème, je suis sous Windows et j'ai codé avec Lazarus un lanceur d'application (pour EduPython pour ceux qui connaissent).
J’appelle mon exécutable (PyScripteur) ainsi :
Tout marche bien, si j'ouvre mon lanceur avec un fichier qui ne contient pas d'accent, mais s'il y a un accent, ça ne fonctionne plus. Je pensais que GetShortPathName pourrait régler le problème, mais ce dernier renvoie une chaine vide sur les caractères accentués....Code:
1
2
3
4
5
6
7
8
9 var prog : String; begin if ParamCount > 0 then prog := ' "'+ParamStr(1)+'"' else prog := ''; [...] ShellExecute(0,'open',PChar('PyScripter.exe'),PChar('--python34 '+prog),'',1)
Merci de votre aide,
Vincent
Salut,
peut-être "protéger" tes accents (je suppose dans "prog") par QuotedStr ?
Genrenon testé, juste une idée comme ça...Code:
1
2var prog : QuotedStr;
Bonjour
Avec Lazarus, les chaînes sont encodées par défaut en UTF8, alors que l'API Windows nécessite un encodage ANSI.
C'est le cas de ta variable prog qui doit être convertie avant d'être transmise à ShellExecute.
Utilise pour cela la fonction Utf8ToWinCP de l'unité LazUtf8 :
Code:
1
2
3 Uses LazUtf8; //... ShellExecute(0,'open',PChar('PyScripter.exe'),PChar('--python34 '+Utf8ToWinCP(prog)),'',1);
Super, merci ! La proposition de DomDA91 fonctionne à merveille, je ne connaissais pas cette fonction, ça fait un bout de temps que je me casse les dents sur le problème !
Le bonheur, c'est simple comme un coup de Forum.
Merci encore,
Bonne journée,
Vincent