none
Raccourci ... semble-t-il un peu particulier RRS feed

  • Question

  • Bonjour tout le monde,

    Depuis un peu plus d'un an, j'utilise un programme que j'ai écrit pour créer des raccourcis, avec l'avantage appréciable sur l'interface standard que l'affichage tient dans l'écran et s'affiche dans une taille lisible.

    Pour les mêmes motivations, j'ai écrit une émulation de l'explorateur qui affiche seulement le répertoire du bureau, et qui permet d'ouvrir les fichiers, y compris les raccourcis, en gérant l'erreur du fichier disparu (raccourci créé un temps sur un fichier, puis celui-ci a été déplacé).

    Jusque là ça marche très bien, avec les valeurs par défaut qu'il faut pour les répertoires.

    Aujourd'hui, avec les mêmes répertoires que d'habitude, je crée un raccourci sur une vidéo, et sur

    link.TargetPath = strTargetPath

    j'obtiens l'erreur

    System.ArgumentException : 'Value does not fall within the expected range.'

    C'est à cette occasion que j'apprends qu'une chaîne de caractères est caractérisée par une fourchette de valeurs.

    Euh ... Entre -1 et +32768 ?

    Par l'explorateur, avec les pirouettes qui s'imposent, je réussis à créer un raccourci, et le mettre sur le bureau.

    Eh bien mon explorateur de bureau l'ouvre bien, mais après avoir dit qu'il a un chemin vide.

    IWshRuntimeLibrary.IWshShell_Class shellClass = new IWshShell_Class();
    IWshShortcut  s = shellClass.CreateShortcut(fi.FullName);
    string strCmd2 = s.TargetPath;
    if (String.IsNullOrEmpty(strCmd2))
    {
    	MessageBox.Show("Chemin vide");
    }

    Et effectivement, la propriété apparaît vide, alors que dans l'interface utilisateur de l'explorateur Windows 10, je vois bien le chemin de la vidéo dans le champ "Cible".

    Le nom du fichier est écrit avec une police de caractères que je n'utilise pas d'habitude, pensez-vous que ça puisse avoir un lien avec le problème ?

    Pourtant, la documentation de CreateShortcut n'est pas très bavarde, me semble-t-il, sur le support de différents jeux de caractères.

    Est-ce qu'une astuce permet de s'en sortir ?

    Le nom de la vidéo a une longueur de 56 caractères (hors extension), + 22 pour le chemin du répertoire. J'ai déjà créé avec mon programme des raccourcis pour des chemins plus longs, par exemple 71 caractères pour le nom de fichier.

    En revanche, il se peut bien que ce soit la première fois que ce jeu de caractères soit utilisé pour un nom de fichier sur lequel je cherche à créer un raccourci. Des jeux de caractères exotiques ont déjà été utilisés, mais pas celui-là.

    Peut-être que je devrais dire comment j'ouvre le fichier, une fois le message d'erreur affiché.

    string strCmd = D.FullName + "\\" + (String.IsNullOrEmpty(strItemPath) ? listView1.SelectedItems[0].Text : strItemPath);

    // D est de type DirectoryInfo try { using (Process p = new Process()) { p.StartInfo.FileName = strCmd; p.StartInfo.UseShellExecute = true; p.Start(); } } catch(Exception ex) { MessageBox.Show(String.Format("{0} : {1}", ex, ex.Message)); }






    • Modifié Gloops mercredi 26 janvier 2022 15:46
    mercredi 26 janvier 2022 15:31

Toutes les réponses

  • Bonjour,

    La réponse dans ce thread pourrait vous aider: How do i get the path name from a file shortcut:

    "Pour obtenir la cible d'un raccourci (extension de fichier .lnk), vous devez d'abord disposer de l'objet COM suivant : Windows Script Host Object Model.
    Ensuite, vous pouvez utiliser les interfaces WshShell (ou WshShellClass) et IWshShortcut pour obtenir la cible d'un raccourci.

    Exemple:

     string linkPathName = @"D:\Picrofo Autobot.lnk"; //Remplacez-le par le chemin du raccourci
    
                if (System.IO.File.Exists(linkPathName))
                {
                 // WshShellClass shell = new WshShellClass();
                    WshShell shell = new WshShell(); //Créer une nouvelle interface WshShell
                    IWshShortcut link = (IWshShortcut)shell.CreateShortcut(linkPathName); //Liez l'interface à votre raccourci
    
                    MessageBox.Show(link.TargetPath); //Afficher la cible dans une MessageBox à l'aide de IWshShortcut
                } 

    "

    Cordialement,

    Nina


    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    jeudi 27 janvier 2022 12:39
    Modérateur
  • Bonjour, merci pour la réponse.

    Mes yeux ont commencé par se croiser au moment de répondre, donc ça a donné une réponse bizarre.

    Mais voici mon code pour la création de raccourci, il me semble quand même que ça se ressemble beaucoup ?

    WshShell shell = new WshShell();
    IWshShortcut link = (IWshShortcut)shell.CreateShortcut(strPathShortcut);
    link.TargetPath = strPathTarget;
    link.Save();



    • Modifié Gloops jeudi 27 janvier 2022 13:00
    jeudi 27 janvier 2022 12:50
  • Bonjour,

    Je ne sais pas si je devrais tenter autre chose, là-dessus.

    Pour le moment, quand je tombe sur un jeu de caractères qui pose problème, je passe par l'explorateur classique en m'aidant de ma loupe dans une main, et de beaucoup de patience dans l'autre.

    lundi 14 février 2022 13:49