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
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
lancer un fichier avec un shell [ par anubis52100 ]
je cherche a ouvrir automatiquement le fichier debug.log avec un executable VB j'utilise la commande shell mais ceci ne fonctionne pas et je n'ai aucu
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|