Accueil > > > OUVERTURE D'UN FICHIER PAR UN LOGICIEL EXTERNE
OUVERTURE D'UN FICHIER PAR UN LOGICIEL EXTERNE
Information sur la source
Description
Ce code permet d'ouvrir un fichier quelconque dans le logiciel associé à ce type de fichier. Il suffit de passer en argument le nom du fichier (avec chemin complet). La fonction vérifie l'existence du fichier, recherche le logiciel associé au type de fichier et ouvre le fichier dans ce logiciel. Un argument optionnel permet de suspendre le process tant que le logiciel externe n'a pas été fermé. CADEAU : Code librement réutilisable :) PS : Ce code a été développé au départ pour ouvrir des pdf (suivant les versions d'acrobat reader, il n'était pas installé au même endroit). Finalement, il s'est révélé générique.
Source
- Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
- Public Declare Function FindExecutable Lib "shell32.dll" Alias "FindExecutableA" (ByVal lpFile As String, _
- ByVal lpDirectory As String, _
- ByVal lpResult As String) As Long
- Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, _
- ByVal bInheritHandle As Long, _
- ByVal dwProcessId As Long) As Long
- Public Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, _
- ByVal dwMilliseconds As Long) As Long
-
- Public Const INFINITE = &HFFFFFFFF ' Infinite timeout
- Public Const SYNCHRONIZE = &H100000
-
- '---------------------------------------------------------------------------------------
- ' Procedure : OuvrirFichier
- ' DateTime : 27/09/2006 18:20
- ' Author : Casy
- ' Purpose : Permet d'ouvrir un document avec l'applicatif (.exe) par défaut.
- ' Vérifie d'abord si le fichier existe, si un applicatif est installé
- ' Possibilité de bloquer le process tant que l'applicatif n'est pas fermé
- ' Retourne TRUE si l'ouverture s'est bien passée, FALSE sinon.
- '---------------------------------------------------------------------------------------
- Public Function OuvrirFichier(fichier As String, Optional attenteFermeture As Boolean = False) As Boolean
- Dim fileappli As String * 250
- Dim result As Integer
- Dim temp As String
- Dim fichAOuvrir As String
- Dim i As Integer
- Dim pid As Double
- Dim phnd As Long
-
- On Error GoTo OuvrirFichier_Error
-
- temp = Dir$(fichier) 'recherche si le fichier existe
- If temp <> "" Then
- ' Le fichier existe
-
- ' Recherche l'exécutable associé
- result = FindExecutable(fichier, vbNullString, fileappli)
- If result > 32 Then
- ' Association trouvée
- i = InStr(1, fileappli, Chr(0), vbBinaryCompare) - 1
- fichAOuvrir = """" & Left$(fileappli, i) & """ " & fichier
- Else
- ' Aucune association de trouvée
- OuvrirFichier = False
- Exit Function
- End If
- Else
- ' Le fichier n'existe pas
- OuvrirFichier = False
- Exit Function
- End If
-
- ' Ouverture du fichier
- pid = Shell(fichAOuvrir, vbMaximizedFocus)
- If pid <> 0 Then
- ' Si attente fermeture demandé, on suspend le process jusqu'à que le logiciel soit fermé.
- If attenteFermeture = True Then
- phnd = OpenProcess(SYNCHRONIZE, 0, pid)
- If phnd <> 0 Then
- Call WaitForSingleObject(phnd, INFINITE)
- Call CloseHandle(phnd)
- End If
- End If
-
- OuvrirFichier = True
- Else
- OuvrirFichier = False
- End If
-
- On Error GoTo 0
- Exit Function
-
- OuvrirFichier_Error:
-
- OuvrirFichier = False
-
- '---- Code à personaliser en cas d'erreur -------------------------------------------------
- Dim message As String
- message = "Erreur " & Err.Number & " (" & Err.Description & ") dans la procedure OuvrirFichier" & vbCrLf & vbCrLf
- message = message & "Vérifier que le fichier est accessible !" & vbCrLf
- message = message & "Vérifier que le logiciel associé est un exécutable !"
- MsgBox message, vbCritical Or vbOKOnly, "ERREUR - OuvrirFichier"
- '------------------------------------------------------------------------------------------
-
- End Function
-
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Declare Function FindExecutable Lib "shell32.dll" Alias "FindExecutableA" (ByVal lpFile As String, _
ByVal lpDirectory As String, _
ByVal lpResult As String) As Long
Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long
Public Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, _
ByVal dwMilliseconds As Long) As Long
Public Const INFINITE = &HFFFFFFFF ' Infinite timeout
Public Const SYNCHRONIZE = &H100000
'---------------------------------------------------------------------------------------
' Procedure : OuvrirFichier
' DateTime : 27/09/2006 18:20
' Author : Casy
' Purpose : Permet d'ouvrir un document avec l'applicatif (.exe) par défaut.
' Vérifie d'abord si le fichier existe, si un applicatif est installé
' Possibilité de bloquer le process tant que l'applicatif n'est pas fermé
' Retourne TRUE si l'ouverture s'est bien passée, FALSE sinon.
'---------------------------------------------------------------------------------------
Public Function OuvrirFichier(fichier As String, Optional attenteFermeture As Boolean = False) As Boolean
Dim fileappli As String * 250
Dim result As Integer
Dim temp As String
Dim fichAOuvrir As String
Dim i As Integer
Dim pid As Double
Dim phnd As Long
On Error GoTo OuvrirFichier_Error
temp = Dir$(fichier) 'recherche si le fichier existe
If temp <> "" Then
' Le fichier existe
' Recherche l'exécutable associé
result = FindExecutable(fichier, vbNullString, fileappli)
If result > 32 Then
' Association trouvée
i = InStr(1, fileappli, Chr(0), vbBinaryCompare) - 1
fichAOuvrir = """" & Left$(fileappli, i) & """ " & fichier
Else
' Aucune association de trouvée
OuvrirFichier = False
Exit Function
End If
Else
' Le fichier n'existe pas
OuvrirFichier = False
Exit Function
End If
' Ouverture du fichier
pid = Shell(fichAOuvrir, vbMaximizedFocus)
If pid <> 0 Then
' Si attente fermeture demandé, on suspend le process jusqu'à que le logiciel soit fermé.
If attenteFermeture = True Then
phnd = OpenProcess(SYNCHRONIZE, 0, pid)
If phnd <> 0 Then
Call WaitForSingleObject(phnd, INFINITE)
Call CloseHandle(phnd)
End If
End If
OuvrirFichier = True
Else
OuvrirFichier = False
End If
On Error GoTo 0
Exit Function
OuvrirFichier_Error:
OuvrirFichier = False
'---- Code à personaliser en cas d'erreur -------------------------------------------------
Dim message As String
message = "Erreur " & Err.Number & " (" & Err.Description & ") dans la procedure OuvrirFichier" & vbCrLf & vbCrLf
message = message & "Vérifier que le fichier est accessible !" & vbCrLf
message = message & "Vérifier que le logiciel associé est un exécutable !"
MsgBox message, vbCritical Or vbOKOnly, "ERREUR - OuvrirFichier"
'------------------------------------------------------------------------------------------
End Function
Conclusion
Copier ce code dans un module
L'utilisation se fait ainsi :
retour = OuvrirFichier("Nom&CheminFichier") ' Pour une exécution asynchrone retour = OuvrirFichier("Nom&CheminFichier", False) ' Idem retour = OuvrirFichier("Nom&CheminFichier", True) ' Pour une exécution synchrone (suspension du process et attente de fermeture)
Problème connu et géré (voir partie "Code à personnaliser"): La fonction Shell génère une erreur si l'applicatif associé n'est pas un exécutable. Dans ce cas l'ouverture du fichier ne marche pas (ex: Fichier image, lorsque c'est l'"Aperçu des images et Télécopie Windows" qui est associé aux fichiers images
Historique
- 27 septembre 2006 18:53:12 :
- Correction des fautes, Rajout des déclarations oubliées
- 09 octobre 2006 16:01:05 :
- Correction de l'association des flags d'option pour le MsgBox : vbCritical & vbOKOnly --> vbCritical Or vbOKOnly
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Ouvrir un doc [ par Ethan0026 ]
Bonjour,j'ai une question un peu bête à poser pour une prog en vb.net :J'ai un fichier .pdf que je souhaiterai executer avec mon prog. J'ai donc fait
Trouver un fichier [ par Charlie ]
Allo...Je veux lancer le logiciel Image-Pro Plus en effectuant un shell sur le fichier, ipwin.exeToutefois, j'aimerais que mon Shell fonctionne peut i
Pb pour ouvrir un fichier [ par Gwen ]
J'utilise le shell pour ouvrir une base access :Shell NomBase, vbNormalFocusMais il m'affiche toujours ce message :"erreur d'execution '53'fichier int
OUVRIR EXCEL [ par nagattaque ]
Salut tout le monde...Voila j'ai un petit souci et je voulais savoir s'il y a une solution a mon probleme...Je suis sous access2000 et ds le code d'un
pb fction shell pr ouvrir fichier excel,ca urge,merci [ par nikostaf ]
salut, j'ai un pb je veux juste ouvrir un fichier excel pour le visualiser donc le plus simple est d'utiliser un shell. code:Logiciel = "c:\program fi
Script Shell pour lancer un fichier XML [ par mockmock ]
Bonjour,Je vous explique: sur mon serveur (Linux), je possède un fichier XML lié avec une feuille XSLT. Après exécution du fichier XML, celui-ci me re
Script Shell pour ouvrir fichier XML [ par mockmock ]
Bonjour,Je vous explique: sur mon serveur (Linux), je possède un fichier XML lié avec une feuille XSLT. Après exécution du fichier XML, celui-ci me re
lancer un fichier par le shell [ par coquille100 ]
je veux pouvoir exécuté un fichier a partir de ca (le but complet est assez compliké ne me demandé pas l'interet c trop long a exp
commande shell et shellexecute [ par tof72 ]
BonjourJe voudrais ouvrir un fichier pdfPouvez vous me donné la commande avec shell pour ouvrir directement le fichier.Pouvez vous
Ouvrir un fichier non exe en vba [ par Tsetse71 ]
Bonjour,Petite question a 2 balles : - comment ouvrir un fichier non exe en vba en sachant que la methode shell ne fonctionne pas elle me renvoie l'er
|
Derniers Blogs
[FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLETECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLE par ROMELARD Fabrice
Speakers: Julien Marechal, Gautier Confiant, Sébastien MEYER La session débute par le positionnement de la solution System Center par rapport aux concepts d'organisation ITIL. Le portail du catalogue de se...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : PLEINIèRE SECOND JOURTECHDAYS PARIS 2012 : PLEINIèRE SECOND JOUR par ROMELARD Fabrice
Après une première journée dédiée aux développeurs, cette seconde journée est dédiée au monde des entreprises et de ses applications. Ainsi, cette pleinière est dédiée à faire un 360 de l'évolution des applications Business aux demandes ac...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
VB6 + GRAPHVIZVB6 + GRAPHVIZ par nouirayosra
Cliquez pour lire la suite par nouirayosra
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|