WinRAR menu contextuel et détection de type de fichier de Windows

Jusqu'à présent, je connais le menu contextuel d'affichage de Windows en fonction de l'extension de fichier plutôt que du type de fichier. Je viens de tester avec un fichier texte vide avec extension mp3 avec winamp et le résultat ci-dessous:

Menu contextuel Winamp

De la même façon, je teste le fichier vide avec extension exe et Windows me donne un menu contextuel comme "Exécuter en tant qu'administrateur". Menu contextuel de l'exécutable

Mais si je crée une archive sfx qui a la même extension exe, comment Windows me donne une icône différente et WinRAR me donne un menu contextuel spécial comme «Extraire ici» comme le montre l'image ci-dessous?

Menu contextuel SFX

Ma question concerne l'en-tête du fichier des lecteurs Windows et représente les données pertinentes ou WinRAR a-t-il un schéma spécial de détection de fichier? Je doute que le deuxième, car pendant la création du menu contextuel WinRAR n'a pas invoqué.

Une autre question est de savoir si c'est à cause du comportement de Windows de lire les en-têtes (comme s'il s'agissait de la création d'une vignette pour des images ou des vidéos), l'extension a-t-elle moins d'importance? N'ont-ils aucune influence dans le menu contextuel?

Les gestionnaires de menu contextuel Windows peuvent être à la fois statiques et dynamiques . Si vous souhaitez approfondir davantage, je vous conseille de lire l'article Raccourcis (Contexte) et les Outils de menu contextuel , notamment en choisissant une méthode de menu de raccourci statique ou dynamique et en personnalisant un menu contextuel à l' aide de verbes dynamiques .

Citation à partir de cet extrait du livre Visual Basic Shell Programming :

Menus contextuels dynamiques

Les menus de contexte statique sont limités car ils sont identiques pour chaque objet de fichier d'un type donné. En outre, le nombre de fichiers pouvant être traités via un menu statique est limité par le programme utilisé pour exécuter la commande. Que faire si vous devez traiter 20 fichiers? Que faire si vous avez besoin de différentes options de traitement en fonction de l'état du fichier lui-même? Il existe également des situations où vous pourriez avoir besoin d'un menu contextuel pour un groupe de fichiers et un autre pour un seul fichier. C'est là que les menus contextuels dynamiques entrent en jeu.

Vous voudrez peut-être que différents éléments de menu soient affichés en fonction de la sélection d'un ou de plusieurs fichiers. Étant donné que le nombre de fichiers sélectionnés peut être déterminé dans IShellExtInit :: Initialize, cela devient une affaire insignifiante. Vous avez également la possibilité de baser l'élément de menu sur le fichier lui-même. En plus du nombre de fichiers sélectionnés, vous connaissez déjà les noms de fichiers en question. Cela signifie que vous pouvez ouvrir le fichier, récupérer des informations et baser l'élément de menu sur les données réelles. Ou vous pouvez examiner un autre attribut du fichier (tel que sa date de création, sa taille ou son statut en lecture seule) et fonder l'élément de menu sur cette information.

Enfin, si vous voulez que le fichier soit effectivement lue par la DLL de l'extension shell de WinRAR (puisque vous semblez le douter), voici les différents appels ReadFile enregistrés par Process Monitor simplement en cliquant avec le bouton droit de la souris sur un WinRAR SFX:

1

(Le nom du processus s'affiche comme explorer.exe et pas rarext.dll, car le gestionnaire de menu contextuel est un objet COM "en cours" que le shell charge directement dans l'espace mémoire d'explorer.exe pour l'exécution).

Comme vous pouvez le voir, il lit les 7 premiers octets pour confirmer qu'il s'agit d'un EXE:

2

Après avoir lu plus de données (sans aucun doute pour obtenir et analyser l'en-tête), il lit ensuite 7 octets du décalage 101 376 pour confirmer qu'il s'agit d'un WinRAR SFX et pas seulement de tout ancien EXE:

3

Cela l'invite à ajouter diverses entrées de menu contextuel telles que Ouvrir avec WinRAR, Extraire avec WinRAR et ainsi de suite, qui ne sont pas ajoutés aux EXE "normaux".

En outre, dans la boîte de dialogue Paramètres de WinRAR, il existe une option intitulée Où vérifier les archives SFX :

4

Voici ce que le fichier d'aide a à dire à ce sujet:

Les options «Où vérifier les archives SFX» contrôlent le traitement des archives SFX dans les menus contextuels. Vérifier le contenu du fichier exécutable et détecter s'il s'agit d'une archive auto-extractible (SFX) présente un certain délai lorsque vous cliquez avec le bouton droit sur chaque fichier ".exe", car WinRAR doit lire et analyser les données de fichier pour savoir si c'est SFX. Bien que ce délai soit négligeable pour les disques durs locaux rapides, il peut être remarqué dans le cas de disques réseau lents. Ce groupe d'options permet d'activer ou de désactiver le traitement SFX pour les disques durs locaux, les disques de réseau et d'autres disques comme CD-ROM et USB séparément. Si vous désactivez ces options, vous ne verrez pas tous les éléments du menu contextuel liés à SFX lorsque vous cliquez avec le bouton droit de la souris sur l'archive SFX. Désactivez donc ces options uniquement si vous rencontrez des retards lorsque vous cliquez avec le bouton droit sur les fichiers ".exe".

J'espère que vous mettez vos doutes en repos. 🙂 En ce qui concerne votre deuxième question sur la question de savoir si les extensions ont "moins d'importance" maintenant et n'ont pas "d'influence dans le menu contextuel [s]", je ne comprends pas ce que vous voulez dire. Les vignettes image / vidéo sont générées par les gestionnaires d'extension de shell (DLL). Une liste des différents gestionnaires peut être trouvée ici . Comme vous pouvez le voir, il est possible d'avoir des gestionnaires d'extension de shell personnalisés pour tout, allant des menus contextuels, des opérations de glisser-déposer, des icônes, des superpositions d'icônes, des feuilles de propriétés, des miniatures, des informations, des métadonnées, des colonnes de l'explorateur, des boîtes de dialogue copier / déplacer / supprimer / renommer , chercher…

Edit: Par coïncidence, Raymond Chen a également posté un article sur les extensions shell (n'oubliez pas de lire le précédent également).

Windows Explorer n'a pas lu les en-têtes.

Menu initialement formé pour toute extension basée sur des clés de registre, ils peuvent être considérés comme des clés de démarrage pour Windows Explorer:

HKLM\SOFTWARE\Classes\Protocols\Filter HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks HKLM\Software\Classes\*\ShellEx\ContextMenuHandlers HKLM\Software\Classes\Directory\ShellEx\ContextMenuHandlers HKLM\Software\Classes\Directory\Shellex\DragDropHandlers HKLM\Software\Wow6432Node\Classes\Directory\Shellex\DragDropHandlers HKLM\Software\Classes\Directory\Shellex\CopyHookHandlers HKLM\Software\Classes\Directory\Background\ShellEx\ContextMenuHandlers HKLM\Software\Classes\Folder\Shellex\ColumnHandlers HKLM\Software\Wow6432Node\Classes\Folder\Shellex\ColumnHandlers HKLM\Software\Classes\Folder\ShellEx\ContextMenuHandlers HKLM\Software\Classes\Folder\ShellEx\DragDropHandlers HKLM\Software\Classes\Folder\ShellEx\PropertySheetHandlers HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers HKCU\Software\Classes\*\ShellEx\ContextMenuHandlers HKCU\Software\Classes\Directory\Background\ShellEx\ContextMenuHandlers 

Il existe une recherche par extension de fichier dans HKEY_LOCAL_MACHINE\Software\Classes et HKEY_CURRENT_USER\Software\Classes , si l'extension du fichier a été trouvée, exécutez les gestionnaires de fichiers désignés.