web-dev-qa-db-fra.com

Ajouter un élément de menu au menu contextuel de Windows uniquement pour un type de fichier spécifique

j'ai développé une application qui charge une image en utilisant le menu contextuel de la fenêtre (clic droit sur le fichier) et pour le moment fonctionne, mais la clé reg est activée

HKEY_CLASSES_ROOT\*

et cela fonctionne avec tous les fichiers.

Je souhaite que l'élément de menu du menu contextuel ne soit affiché qu'avec des fichiers .jpg.

Comment puis-je faire ça? Quelles clés de registre dois-je utiliser?

Merci d'avance.

40
Sein Kraft

1) Identifiez le type de fichier (ProgID) pour les fichiers .jpg

Cela peut être fait en vérifiant la valeur par défaut de HKEY_CLASSES_ROOT\.jpg. Cela peut être basé sur ce que vous avez installé, mais pour les besoins de cet exemple, nous l'appellerons jpegfile, une valeur par défaut courante.

2) Définissez les propriétés de l'élément de menu contextuel (verbe) pour ce type de fichier

Vous pouvez définir des éléments de menu contextuel par utilisateur dans HKEY_CURRENT_USER\Software\Classes\jpegfile\Shell. Cette clé a une liste de verbes pour le type de fichier. Il existe une clé similaire dans HKEY_LOCAL_MACHINE\Software\Classes\jpegfile\Shell, et ce sont les valeurs par défaut du système pour le type de fichier. Vous pouvez également y mettre une clé verbale, mais si la même clé existe dans HKCU, elle sera remplacée, alors soyez avisé.

3) Définissez la valeur de la commande

La valeur de clé minimale nue qui doit être définie pour le faire fonctionner est la valeur par défaut de la sous-clé command. Vous devez définir cela avec le chemin d'accès à votre application, comme ceci: HKEY_CURRENT_USER\Software\Classes\jpegfile\Shell\open_with_myapp\command serait défini sur "c:\path\to\myapp.exe" "%1". Maintenant, un menu contextuel pour les fichiers .jpg aura un élément "open_with_myapp" qui lancera votre application lorsque vous cliquez dessus, et passera le nom de fichier du fichier sélectionné comme paramètre. Bien sûr, la façon dont votre application traite les paramètres dépend de vous, vous devez donc définir la chaîne de paramètres sur quelque chose que votre application peut traiter.

4) Définir d'autres propriétés de verbe

J'imagine que vous voudrez probablement que l'élément du menu contextuel lise quelque chose d'un peu plus convivial que le nom de la clé. Vous pouvez faire afficher le menu contextuel quelle que soit l'étiquette que vous souhaitez pour votre élément en définissant la valeur par défaut de cette clé (open_with_myapp).

Voilà votre aperçu de base. Consultez certainement ma réponse à cette question sur l'association d'un fichier, qui a une réponse similaire:

80
Factor Mystic

Il existe une autre clé dans le registre qui fonctionne indépendamment des programmes par défaut de l'utilisateur: HKEY_CLASSES_ROOT\SystemFileAssociations. Puisque personne ne l'a mentionné sur cette question ... Pas besoin de vérifier ProgID avant d'ajouter l'élément de menu contextuel. Exemple:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\SystemFileAssociations\.mkv\Shell\subtitle]
@="Search subtitles..."

[HKEY_CLASSES_ROOT\SystemFileAssociations\.mkv\Shell\subtitle\command]
@="\"D:\\Tools\\subsearch.exe\" \"%1\""

Référence: https://docs.Microsoft.com/en-us/windows/desktop/Shell/app-registration#registering-verbs-and-other-file-association-information

15
andromeda947