Votre vue d'ensemble du processus est trouvé dans cet article MSDN. Les pièces principales sont en bas de la liste:
Un ProgID (essentiellement, le type de fichier de la clé de registre) est ce qui contient les fichiers importants de votre type de propriétés, comme l'icône, la description et les éléments de menu contextuel, y compris l'application utilisée lorsque le fichier est un double-clique. De nombreuses extensions peuvent avoir le même type de fichier. Cette cartographie est réalisée à l'étape suivante:
- Registre de l'extension de nom de fichier pour le type de fichier
Ici, vous définissez une valeur de registre de votre extension, le réglage de l'extension du type de fichier à l'identificateur de Programme que vous avez créé à l'étape précédente.
Le montant minimum de travail nécessaire pour obtenir un fichier pour l'ouvrir avec votre application est le réglage/la création de deux clés de registre. Dans cet exemple, .reg
le fichier, j'ai créer un fichier de type (blergcorp.blergapp.v1
) et de l'association de l'extension de fichier (.blerg
) avec elle.
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Classes\blergcorp.blergapp.v1\shell\open\command]
@="c:\path\to\app.exe \"%1\""
[HKEY_CURRENT_USER\Software\Classes\.blerg]
@="blergcorp.blergapp.v1"
Maintenant, vous voulez probablement pour accomplir ce programme. Pour être absolument casher, vous pouvez le vérifier l'existence de ces touches, et de modifier le comportement du programme en conséquence, surtout si vous êtes en supposant que le contrôle de certaines communes de l'extension de fichier. Cependant, l'objectif peut être réalisé par la création de ces deux touches à l'aide de la fonction SetValue.
Je ne suis pas positif exacte de la syntaxe C++, mais en C# la syntaxe ressemble à ceci:
Registry.SetValue(@"HKEY_CURRENT_USER\Software\Classes\blergcorp.blergapp.v1\shell\open\command", null, @"c:\path\to\app.exe \"%1\"");
Registry.SetValue(@"HKEY_CURRENT_USER\Software\Classes\.blerg", null, "blergcorp.blergapp.v1");
Bien sûr, vous pourriez ouvrir manuellement chaque sous-clé, créez manuellement le ProgID et l'extension de la sous-clé, et puis définissez la valeur de la clé, mais une belle chose à propos de l' SetValue
de la fonction, c'est que si les touches ou les valeurs n'existent pas, ils seront automatiquement créés. Très pratique.
Maintenant, un petit mot à propos de laquelle la ruche à utiliser. Beaucoup d'association de fichier dans les exemples en ligne, notamment sur MSDN, montrer ces touches en HKEY_CLASSES_ROOT
. Je ne recommande pas de faire cela. Que la ruche est une fusion, vue virtuelle de HKEY_LOCAL_MACHINE\Software\Classes
(les valeurs par défaut du système) et HKEY_CURRENT_USER\Software\Classes
(les paramètres de l'utilisateur), et écrit à une sous-clé dans la ruche sont redirigés vers la même clé, en HKEY_LOCAL_MACHINE\Software\Classes
. Maintenant, il n'y a aucun problème à faire cela, mais vous pouvez rencontrer ce genre de problème: Si vous écrivez à HKCR (redirigé HKLM), et l'utilisateur a spécifié les mêmes clés avec des valeurs différentes dans HKCU, la HKCU valeurs l'emportent. Par conséquent, votre écrit réussira, mais vous ne verrez pas de changement, car HKEY_CURRENT_USER
paramètres priment HKEY_LOCAL_MACHINE
paramètres.
Par conséquent, vous devez prendre cela en considération lors de la conception de votre application. Maintenant, sur le revers de la médaille, vous pouvez écrire à seulement HKEY_CURRENT_USER
, que mes exemples ici montrent. Cependant, cette association de fichier réglage ne sera chargée de l'utilisateur actuel, et si votre demande a été installé pour tous les utilisateurs, votre application ne se lance pas quand cet autre utilisateur ouvre le fichier dans Windows.
Que devrait être un décent apprêt pour ce que vous voulez faire. Pour plus de lecture, je suggère
Et voir aussi mon semblable réponse à une question similaire: