La vie secrète de WindowsL'Explorateur Windows ne fait pas de la littérature

Raymond Chen

Il était une fois le PowerToy Send To X. Il vous permettait de faire trucs géniaux comme sélectionner un ensemble de fichiers, cliquer avec le bouton droit, et ensuite sélectionner Envoyer au presse-papiers en tant que noms. Comme prévu, cette opération copiait les noms des fichiers sélectionnés dans le presse-papiers.

C'était certes un PowerToy bien utile, mais pourquoi avait-il même dû être créé ? Pourquoi ne puis-je pas juste copier les fichiers dans l'Explorateur Windows® et les coller ensuite en tant que texte pour obtenir les noms de fichier ? Ou mieux encore, pourquoi ne puis-je pas simplement faire glisser des fichiers de l'Explorateur Windows et les déposer dans le Bloc-notes pour en obtenir les noms ?

Nous avons essayé, mais ça ne marche pas.

Le transfert de données, que ce soit à l'aide du presse-papiers ou du glisser-déplacer, est régi par les objets de données OLE, représentés par l'interface IDataObject. Un objet de données offre toute une série de formats. Certains formats de presse-papiers, y compris le texte et les images bitmaps, existent à peu près depuis les débuts de Windows. Les autres ont été progressivement ajoutés. Lorsque la fonctionnalité de glisser-déplacer de fichiers a été introduite pour la première fois dans Windows, elle avait la forme d'un HDROP. Vous pouviez la transmettre à des fonctions telles que DragQueryFile, par exemple, pour extraire les noms de fichier. Lorsque vous copiez un élément dans le presse-papiers de l'Explorateur Windows, l'objet de données résultant offre, entre autres, le HDROP mentionné ci-dessus, le contenu du fichier et un descripteur du groupe de fichiers. Mais l'un des formats que vous ne verrez pas proposé par l'objet de données est le format texte.

Lorsque une cible de déplacement (un élément vers lequel vous pouvez déplacer les objets) est informée qu'un objet de données est glissé ou déplacé vers lui, elle demande à l'objet de données « Qu'est-ce que tu as ? » L'objet de données répond en listant tous les formats qu'il prend en charge, dans un ordre de préférence décroissant. En d'autres termes, le premier format renvoyé par l'objet de données est le format qui décrit le mieux l'objet. Vient ensuite le meilleur format suivant, et ainsi de suite, jusqu'à ce que vous arriviez au dernier format, qui est juste une pâle ombre de l'objet original. Par exemple, l'objet de données qui représente certains objets issus d'une fenêtre de l'Explorateur Windows fournirait probablement d'abord une liste d'ID de noyau, puisque c'est une représentation presque parfaite du contenu d'une fenêtre de l'Explorateur Windows. Ensuite viendrait dans la liste un descripteur de groupe de fichier, suivi du contenu des fichiers, puis un HDROP.

En 1998, l'équipe du shell a essayé d'ajouter le texte brut à la liste de formats offerts, en le mettant tout à la fin de la liste. Pour l'essentiel, ce format disait, « si vous êtes vraiment désespéré, au moins vous pouvez obtenir un peu de texte (à savoir, la liste de fichiers). » Malheureusement, dans la réalité plusieurs programmes étaient distraits par le joli format texte et disaient, « Ooooh, j'aime le texte ». Ces programmes allaient directement au format texte qui ne contenait rien d'autre qu'une liste de fichiers. Par conséquent, lorsque vous faisiez glisser un fichier de l'Explorateur Windows et que vous le déposiez déposé dans un document, le programme insérait juste le nom du fichier au lieu d'insérer le fichier lui-même dans le document.

Oups.

En raison des commentaires très négatifs sur la compatibilité des applications, cette modification a été annulée. Par conséquent, lorsque vous glissez-déplacez ou collez des fichiers copiés à partir de l'Explorateur Windows, l'objet de données de noyau n'offre pas les noms de fichier au format texte.

Windows Vista®, toutefois, corrige ce très vieux défaut en vous offrant un moyen de copier le chemin au format texte : appuyez sur la touche MAJ lorsque vous cliquez avec le bouton droit afin d'afficher le menu contextuel étendu. Vous obtiendrez ainsi la nouvelle option Copier en tant que chemin d’accès. Pas besoin d'un PowerToy.

Raymond Chen, The Old New Thing, et son livre du même titre (Addison-Wesley, 2007) traitent de l’historique de Windows et de la programmation Win32. Il laisse l'amélioration des mécanismes aux autres.

© 2008 Microsoft Corporation et CMP Media, LLC. Tous droits réservés. Toute reproduction, totale ou partielle, est interdite sans autorisation préalable.