Je veux obtenir un chemin vers les programmes associés à une extension de fichier, de préférence via Win32 API. P>
UPD: P>
Supposons que j'ai Office11 et Office12 installé sur ma machine, le programme par défaut pour .xls est Office 11. Si vous consultez HKEY_CLASSES_ROOT \ Excel.sheet.8 \ shell \ Open \ Commande Il y a un chemin d'Office11 Excel.exe, Mais quand j'ai le droit de cliquer avec le fichier, je peux choisir Office12 à Ouvrir avec l'élément de menu. Alors, où est-ce que cette association est stockée? P>
J'utilise c #. p>
Merci. P>
3 Réponses :
Vous avez toujours voulu associer de manière programmable un type de fichier sur le système avec votre application, mais n'aimais pas l'idée de creuser dans le registre vous-même? Si tel est le cas, cet article et le code sont juste pour vous. p> blockQuote>
Merci d'aide, mais je dois obtenir des associations, ne pas définir) je regarde le code source mais je ne trouve toujours pas de manière (
J'ai écrit une petite routine: qui est appelé comme: p>
Merci d'avoir pris le temps d'écrire cette routine, mais il semble que c'est une façon très enchevêtrée d'obtenir ce genre de choses de registre ... Par exemple, l'extension XLS: Retours de routine non seulement des programmes recommandés, mais toutes les apllications qui ont déjà ouvert ce type de Fichier (même des applications écrites par moi), il ne renvoie également qu'un seul progid excessif.sheet.8, j'ai essayé de le registre de Serach, mais n'a trouvé que de la voie à Office 11 Excel ... De toute façon, merci encore de fournir une bonne réponse. C'est plus que rien
Pas mal, mais ne vous obtient pas les noms de programme: /
J'ai une méthode améliorée de Larstech. Maintenant, il renvoie des chemins vers des programmes.
public List<string> RecommendedPrograms(string ext) { //Search programs names: List<string> names = new List<string>(); string baseKey = @"Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\." + ext; string s; using (RegistryKey rk = Registry.CurrentUser.OpenSubKey(baseKey + @"\OpenWithList")) { if (rk != null) { string mruList = (string)rk.GetValue("MRUList"); if (mruList != null) { foreach (char c in mruList) { s = rk.GetValue(c.ToString()).ToString(); if (s.ToLower().Contains(".exe")) names.Add(s); } } } } if (names.Count == 0) return names; //Search paths: List<string> paths = new List<string>(); baseKey = @"Software\Classes\Applications\{0}\shell\open\command"; foreach (string name in names) using (RegistryKey rk = Registry.CurrentUser.OpenSubKey(String.Format(baseKey, name))) { if (rk != null) { s = rk.GetValue("").ToString(); s = s.Substring(1, s.IndexOf("\"", 2) - 1); //remove quotes paths.Add(s); } } if (paths.Count > 0) return paths; //Search pathes for Windows XP: foreach (string name in names) using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(String.Format(baseKey, name))) { if (rk != null) { s = rk.GetValue("").ToString(); s = s.Substring(1, s.IndexOf("\"", 2) - 1); //remove quotes paths.Add(s); } } return paths; }
C'est dans le registre, alors peut-être que vous devriez simplement essayer de lire les programmes associés du registre
Regarde ici. Vous devez obtenir les informations du registre Stackoverflow.com/Questtions/212906/...
Dupliqué possible de Windows et lancement Applications associées à une extension < / a>
@ODed: Tout d'abord, je regarde dans le registre, mais il n'y a qu'un programme qui fonctionne lorsque l'utilisateur double-clique sur un fichier, mon objectif pour répertorier les programmes alternatifs de la boîte de dialogue "Ouvrir ..." ou même menu déroulant
@Hans Passant: Cette question est d'obtenir une association "primaire", j'ai besoin d'obtenir des associations recommandées