Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

RÉCUPÉRATION DES APPLICATIONS "OUVRIR AVEC..." D'UN FICHIER (D'UNE EXTENSION)


Information sur la source

Description

Cette fonction retourne la liste des applications (en fait la liste des commandes Shell) pour lancer le type de fichier concerné (on fournit l'extension du fichier).
Cette liste correspond aux applications présentes dans le menu contextuel "Ouvrir avec..." d'Explorer lorsque l'on fait un clic droit sur un fichier.
 

Source

  • Public Function GetOpenWithApp(ByVal Extension As String) As List(Of String)
  • Dim hsubKeyExt, hSubKeyApp As RegistryKey
  • GetOpenWithApp = New List(Of String)
  • 'Récupération des noms d'applications liés à l'extension
  • hsubKeyExt = Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\." & Extension & "\OpenWithList")
  • If Not hsubKeyExt Is Nothing Then
  • Dim sApplication As String
  • Dim Cles() As String = hsubKeyExt.GetValueNames
  • For Each sApplication In Cles
  • sApplication = hsubKeyExt.GetValue(sApplication)
  • 'Récupération de la commande pour lancer cette application
  • hSubKeyApp = Registry.ClassesRoot.OpenSubKey("Applications\" & sApplication & "\shell\open\command")
  • If Not hSubKeyApp Is Nothing Then
  • GetOpenWithApp.Add(hSubKeyApp.GetValue(""))
  • hSubKeyApp.Close()
  • End If
  • Next
  • hsubKeyExt.Close()
  • End If
  • End Function
Public Function GetOpenWithApp(ByVal Extension As String) As List(Of String)
        Dim hsubKeyExt, hSubKeyApp As RegistryKey
        GetOpenWithApp = New List(Of String)

        'Récupération des noms d'applications liés à l'extension
        hsubKeyExt = Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\." & Extension & "\OpenWithList")
        If Not hsubKeyExt Is Nothing Then
            Dim sApplication As String
            Dim Cles() As String = hsubKeyExt.GetValueNames

            For Each sApplication In Cles
                sApplication = hsubKeyExt.GetValue(sApplication)
                'Récupération de la commande pour lancer cette application
                hSubKeyApp = Registry.ClassesRoot.OpenSubKey("Applications\" & sApplication & "\shell\open\command")
                If Not hSubKeyApp Is Nothing Then
                    GetOpenWithApp.Add(hSubKeyApp.GetValue(""))
                    hSubKeyApp.Close()
                End If
            Next
            hsubKeyExt.Close()
        End If
    End Function

Commentaires et avis

signaler à un administrateur
Commentaire de Alain Proviste le 30/06/2005 18:23:27 administrateur CS

une alternative à FindExecutable ?

signaler à un administrateur
Commentaire de loskiller62 le 30/06/2005 21:33:22

Je viens de découvrir cette API. Ce que je propose n'en est pas une alternative. Cette fonction va par exemple aider à recréer un menu contextuel sur un contrôle représentant un fichier. On récupère vraiment tout les logiciels utilisables pour ouvrir un type de fichier, enfin tout du moins les logiciels que l'on retrouve lorsqu'on fait un clic droit sur un fichier dans explorer et que l'on se place sur "Ouvrir avec..."

Après pour retrouver l'executable lié à un fichier on utilisera donc effectivement FindExecutable plutôt que de se balader dans la bdr.

Enfin pour ouvrir un fichier (en .NET 2005 beta 2 tout du moins), on pourras utiliser System.Diagnostics.Process. (J'en profite pour balancer quelques trucs ;-) )

signaler à un administrateur
Commentaire de jmenfous le 07/07/2005 11:58:01

Si tu veux un truc vraiment simple...

Windows est plustot simpa avec nous car quand tu lances la methode
process.Start("fichier.txt")

C'est windows qui se charge de trouver le programme utlise sur la machine pour ouvrir le fichier... donc pas besoin de chercher il le fait pour toi.

Autre test
process.Start("http://www.google.fr")
et la mirrrracle IE6 souvre... enfin si c'est ton navigateur par defaut.

Personnellement j'utilise cette methode pour lancer des commandes sur mon PC a partir de mon Pocket PC et ca marche bien (bien entendu c'est un service sur le PC qui ecoute sur un port les demandes du pocket)

Et pour ca pas besoin de la beta 2, ;-)
Pour les amoureux de ce bon vieu VB6, il y a toujours SHELL("") et ca marche aussi bien.

signaler à un administrateur
Commentaire de loskiller62 le 07/07/2005 19:45:21

Bien sûr, je connais ça et je l'utilise dans le même programme, mais ce que tu proposes ouvre le fichier avec l'application par défaut. C'est bien, mais maintenant si je veux offrir la possibilité d'ouvrir le fichier avec les autres applications définies par l'utilisateur, j'ai besoin de ce code.

signaler à un administrateur
Commentaire de jmenfous le 08/07/2005 09:22:02

Mais j'ai bien compris, ne t'en fait pas...

J'ai vu de la lumiere donc je suis entre. Non mais comme si je collais une note de 10/10 comme ca au hazard sans regarder la source... en plus quand je n'aime pas je ne note pas.

PS: petite idee pour toi, si tu combines ca avec une extracteur d'icons, tu pourrais te faire un menu sympa ;-)

signaler à un administrateur
Commentaire de loskiller62 le 10/07/2005 20:43:57

Mince j'avais pas vu la note ^^. Merci.
Pour le coup des icônes c'est appliqué dans mon programme. Je vais peut être mettre à jour cette source pour les prendre en compte.

signaler à un administrateur
Commentaire de zeunz le 26/04/2006 09:12:26

slt tt le monde,
comment rajouter SON application ds le menu "ouvrir avec"?

merci du renseignement.

signaler à un administrateur
Commentaire de jmenfous le 26/04/2006 09:53:45

Un simple lien dans le repertoire SENDTO qui se trouve dans le repertoire suivant
C:\Documents and Settings\<Ton Login>\SendTo

Et voila c gagne, tu peux programmer la creation de ce raccourci comme le raccourci dans le menu demarrer, quand tu cree un pacquage de deploiment via visual.

signaler à un administrateur
Commentaire de zeunz le 26/04/2006 09:59:11

ok merci pr l'info, j'en prends note.
Bye, Zeunz.

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,218 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.