Les Snippets

Connexion

Ouverture d'un fichier par un logiciel externe

Niveau requis pour utiliser/comprendre cette source : 2 ( Initié )
Créé le 27/09/2006 18:58:43 et initié par casy [Liste]
Vue : 15645
Catégorie(s) : API, Fichier / Disque, Trucs & Astuces
Langages dispo pour ce code :
- VB6
- Windev
- Python
- C# 1.x, C# 2.x
- Java
- Voir tous les langages pour ce code snippet



Langage : VB6
Date ajout : 27/09/2006
Posté par casy [Liste]
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 & vbOKOnly, "ERREUR - OuvrirFichier"
'------------------------------------------------------------------------------------------
End Function

Remarque :
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

Snippets en rapport avec : Fichier, Lancer, Ouvrir, Shell, Findexécutable



Codes sources en rapport avec : Fichier, Lancer, Ouvrir, Shell, Findexécutable

{Visual Basic, VB6, VB.NET, VB 2005} OUVERTURE D'UN FICHIER PAR UN LOGICIEL EXTERNE
Ce code permet d'ouvrir un fichier quelconque dans le logiciel associé à ce type de fichier. Il s...

{C# / C#.NET} EXTRACTION DES MINIATURES DES FICHIERS (COMME DANS L'EXPLORATEUR MODE DÉTAILS)
Ce code permet d'extraire les miniatures des fichiers comme en mode Détails de l'explorateur Windows...

{Visual Basic, VB6, VB.NET, VB 2005} (.NET) EXTRACTION DES MINIATURES DES FICHIERS (COMME DANS L'EXPLORATEUR MODE DÉTAILS)
Ce code permet d'extraire les miniatures des fichiers comme en mode Détails de l'explorateur Windows...

{Visual Basic, VB6, VB.NET, VB 2005} OUVRIR DES HTA SANS MESSAGE DE LA PART DE WINDOWS
Lorsque l'on essaie d'ouvrir un fichier a partir d'un hta, window (IE version6.00.2900 et +) nous ...

{Visual Basic, VB6, VB.NET, VB 2005} EXTRACTION DES MINIATURES DES FICHIERS (COMME DANS L'EXPLORATEUR MODE DÉTAILS)
Ce code permet d'extraire les miniatures des fichiers comme en mode Détails de l'explorateur Windows...

{Visual Basic, VB6, VB.NET, VB 2005} RÉCUPÉRER LE HANDLE APRÈS UN SHELLEXECUTE
Bon, ça y est. Après un week-end entier à m'arracher le peu de cheveux qui me reste, voilà une versi...

{PDA / PocketPC} SHELL SUR POCKET PC OU COMMENT LANCER UNE APPLICATION PAR LE CODE
Cet exemple vous présente une solution pour lancer une application, la commande Shell n'existant pas...

{JAVA / J2EE} IMPLÉMENTATION D'UN SHELL POUR LA GESTION D'UN SYSTEME D'EXPLOITATION
Cette application consiste en un shell éxécuté avec succés sous windows (Linux pas encore testé) Ce...

{Visual Basic, VB6, VB.NET, VB 2005} EXÉCUTER UN PROGRAMME (OU UN FICHIER VIA SON PROGRAMME ASSOCIÉ) ET ATTENDRE LA FIN DE SON EXÉCUTION.
J'ai cherché sur ce site sans trouver ce que je cherchais donc je dépose cette fonction que j'ai écr...

{Visual Basic, VB6, VB.NET, VB 2005} OUVRIR PLUSIEURS FICHIERS DANS UNE SEULE INSTANCE
Voici un bout de code qui permet d'ouvrir des fichiers dans une seule instance de votre appli. je l'...