IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Vos contributions VB6 Discussion :

[Sources] API shellExecute, Ouverture conditionelle d'un fichier/dossier [Fait]


Sujet :

Vos contributions VB6

  1. #1
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut [Sources] API shellExecute, Ouverture conditionelle d'un fichier/dossier
    Citation Envoyé par jmfmarques
    Allez...
    Je vais saisir cette occasion pour proposer à Bbil (s'il en est d'accord) de proposer à ma place , en contributions, un truc qui ne répond pas directement à celà mais à plusieurs questions de cette nature posées au cours des derniers mois.
    Le fichier existe-t-il ? est-il "occupé" ? peut-on le lire ? etc...
    Tu veux celà Bbil ?
    voici donc un code, permettant d'utiliser la fonction API ShellExecute, pour ouvrir un dossier (dans explorateur windows) , ou un fichier dans l'application associée (le bloc note pour un .txt, Word pour un .doc...) ..
    et tout cela en gérant l'erreur sur la non disponibilité du fichier .. (inexistant, pas d'association.....)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
     
    Option Explicit
     
    Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    'La fonction ShellExecute ouvre ou édite le fichier spécifié.
    'Ce fichier peut être un fichier exécutable ou un document.
    'En cas de succès, la valeur retournée par la fonction est le handle de l'application lancée
    '                   ou celui de l'application DDE/serveur
    'En cas d'échec, la valeur retournée par la fonction est un n° d'erreur inférieur ou égal à 32.
    'je vous fais grâce des erreurs possibles, que vous verrez plus bas (constantes auto-explicites)
    '=====================================Les paramètres=============================================
    '=== hwnd : spécifie le handle de la fenêtre parent. Cette fenêtre est celle qui reçoit
    '           les boites de message générées par l'application (donc également les messages d'erreur)
    '=== lpOperation  : représente un pointeur vers une chaîne de caractères terminée par un NULL
    '                   et qui spécifie l'opération à exécuter. Sont valables les chaines suivantes :
    '            ---open : la fonction ouvre le fichier (qui peut être un fichier
    '                                  exécutable ou un document, mais également un répertoire à
    '                                  ouvrir), spécifié par lpfile.
     
    '            ---print : La fonction édite le fichier spécifié par lpfile, fichier qui ne peut alors
    '                qu'être un document
    '                Si toutefois, le fichier est finalement un exécutable, la fonction ouvre ce
    '                fichier comme si "open" avait été utilisé au lieu de "Print"
     
    '            ---Explore : la fonction explore le répertoire spécifié par lpfile
     
    '                 le paramètre lpOperation peut être un NULL. Dans un tel cas, la fonction ouvre le fichier
    '                 spécifié par lpfile.
    '=== lpFile : représente un pointeur vers une chaîne de caractères terminée par un NULL et qui
    '             spécifie le fichier à ouvrir ou éditer ou le répertoire à ouvrir ou explorer.
    '             La fonction peut ouvrir un exécutable ou un fichier document. Elle peut éditer un
    '             fichier document.
    '=== lpParameters : représente un pointeur vers une chaîne de caractères terminée par un NULL, qui
    '                   spécifie les paramètres à passer à l'application (si lpfile est un exécutable
    '                   uniquement)
    '                   Si lpfile n'est pas un exécutable, le paramètre lpParameters doit être un NULL.
    '=== lpDirectory : représente un pointeur vers une chaîne de caractères terminée par un NULL et
    '                  qui spécifie je répertoire par défaut.
     
     
    '=== nShowCmd : Spécifie la façon dont l'application doit être montrée à l'ouverture, si lpfile
    '               est un exécutable uniquement
    '               Ce pâramètre peut recevoir l'une des valeurs suivantes :
     
    ' SW_HIDE (pour cacher la fenêtre et en activer une autre) - SW_MAXIMIZE (pour "maximiser"
    'l'affichage de la fenêtre) - SW_MINIMIZE (pour "minimiser" l'affichage de la fenêtre et
    'activer la fenêtre suivante en respectant le "zorder") - SW_RESTORE (pour activer et afficher la
    'fenêtre. Si celle-ci est "maximisée" ou "minimisée", Windows la restitue dans ses dimensions et
    'position d'origine. A spécifier donc pour restaurer) - SW_SHOW (pour activer la fenêtre et l'afficher
    'dans ses dimensions et position en cours) - SW_SHOWDEFAULT (règle l'état d'affichage sur la base
    'du flag SW_... spéciifié dans la structure STARTUPINFO passée à la fonction CreateProcess
    'par le programme ayant démarré l'application. Une application doit appeler ShowWindow avec ce
    '"flag" pour définir l'état initial d'affichage de sa fenêtre principale) - SW_SHOWMAXIMIZED (pour
    'activer la fenêtre et l'afficher à ses dimensions maximum) - SW_SHOWMINIMIZED (pour activer la
    ' fenêtre et l'afficher à ses dimensions minimum) - SW_SHOWMINNOACTIVE (pour afficher la fenêtre
    ' comme une fenpetre réduite, la fenêtre restant active) - SW_SHOWNA (pour afficher dans les dimensions
    'position en cours, la fenêtre restant active) - SW_SHOWNOACTIVATE (pour afficher la fenêtre dans
    'ses plus récentes dimensions et position,la fenêtre restant active) - SW_SHOWNORMAL (pour afficher
    'et activer une fenêtre. Si cette dernière est "maximisée" ou "minimisée", Windows la restaure
    'dans ses dimensions et position d'origine. Une application doit spécifier ce "flag" lors du premier
    'affichage d'une fenêtre)
    'Si lpFile désigne un fichier document, nShowCmd doit avoir la valeur 0 (zero).
     
     
    Private Declare Function ShellExecuteForExplore Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, lpParameters As Any, lpDirectory As Any, ByVal nShowCmd As Long) As Long
    Public Enum EShellShowConstants
         zouSW_HIDE = 0
         zouSW_MAXIMIZE = 3
         zouSW_MINIMIZE = 6
         zouSW_SHOWMAXIMIZED = 3
         zouSW_SHOWMINIMIZED = 2
         zouSW_SHOWNORMAL = 1
         zouSW_SHOWNOACTIVATE = 4
         zouSW_SHOWNA = 8
         zouSW_SHOWMINNOACTIVE = 7
         zouSW_SHOWDEFAULT = 10
         zouSW_RESTORE = 9
         zouSW_SHOW = 5
    End Enum
    Private Const ERROR_FILE_NOT_FOUND = 2&
    Private Const ERROR_PATH_NOT_FOUND = 3&
    Private Const ERROR_BAD_FORMAT = 11&
    Private Const SE_ERR_ACCESSDENIED = 5           ' accès interdit
    Private Const SE_ERR_ASSOCINCOMPLETE = 27
    Private Const SE_ERR_DDEBUSY = 30
    Private Const SE_ERR_DDEFAIL = 29
    Private Const SE_ERR_DDETIMEOUT = 28
    Private Const SE_ERR_DLLNOTFOUND = 32
    Private Const SE_ERR_FNF = 2                     '  Fichier non trouvé
    Private Const SE_ERR_NOASSOC = 31
    Private Const SE_ERR_PNF = 3                     '  chemin inconnu
    Private Const SE_ERR_OOM = 8                     '  dépassement de mémoire
    Private Const SE_ERR_SHARE = 26
     
    Public Function ShellEx(ByVal sFile As String, _
            Optional ByVal eShowCmd As EShellShowConstants = zouSW_SHOWDEFAULT, _
            Optional ByVal sParameters As String = "", _
            Optional ByVal sDefaultDir As String = "", _
            Optional sOperation As String = "open", _
            Optional Owner As Long = 0 _
        ) As Boolean
    Dim lR As Long
    Dim lErr As Long, sErr As String
        If (InStr(UCase$(sFile), ".EXE") <> 0) Then
            eShowCmd = 0
        End If
        On Error Resume Next
        If (sParameters = "") And (sDefaultDir = "") Then
            lR = ShellExecuteForExplore(Owner, sOperation, sFile, 0, 0, zouSW_SHOWNORMAL)
        Else
            lR = ShellExecute(Owner, sOperation, sFile, sParameters, sDefaultDir, eShowCmd)
        End If
        'MsgBox lR
        If (lR < 0) Or (lR > 32) Then
            ShellEx = True
        Else
            lErr = vbObjectError + 1048 + lR
            Select Case lR
            Case 0
                lErr = 7: sErr = "Dépassement de mémoire"
            Case ERROR_FILE_NOT_FOUND
                lErr = 53: sErr = "Fichier non trouvé"
            Case ERROR_PATH_NOT_FOUND
                lErr = 76: sErr = "Chemin inconnu"
            Case ERROR_BAD_FORMAT
                sErr = "L'exécutable n'est pas valide ou est corrompu"
            Case SE_ERR_ACCESSDENIED
                lErr = 75: sErr = "Erreur/ accès au répertoire ou au fichier"
            Case SE_ERR_ASSOCINCOMPLETE
                sErr = "Ce type de fichier est sans association valable"
            Case SE_ERR_DDEBUSY
                lErr = 285: sErr = "Le fichier n'a pu être ouvert car en cours d'utilisation. Recommencez plus tard SVP."
            Case SE_ERR_DDEFAIL
                lErr = 285: sErr = "Le fichier n'a pu être ouvert car la transaction DDE a failli.  Recommencez plus tard SVP."
            Case SE_ERR_DDETIMEOUT
                lErr = 286: sErr = "Le fichier n'a pu être ouvert (délai max dépassé).  Recommencez plus tard SVP."
            Case SE_ERR_DLLNOTFOUND
                lErr = 48: sErr = "Impossible de trouver la DLL spécifiée."
            Case SE_ERR_FNF
                lErr = 53: sErr = "Fichier non trouvé"
            Case SE_ERR_NOASSOC
                sErr = "Aucune association définie pour ce type de fichier"
            Case SE_ERR_OOM
                lErr = 7: sErr = "Mémoire épuisée"
            Case SE_ERR_PNF
                lErr = 76: sErr = "Chemin inconnu"
            Case SE_ERR_SHARE
                lErr = 75: sErr = "Violation de partage !."
            Case Else
                sErr = "Une erreur a surgi au moment d'essayer d'ouvrir ou d'éditer le fichier choisi."
            End Select
     
            MsgBox "Error n°" & CStr(lErr) & Chr(13) & sErr & " sur ouverture  : " & Chr(13) & sFile, vbCritical
            ShellEx = False
        End If
     
    End Function
     
     
    Private Sub Command1_Click()
       If ShellEx("c:\tmp") Then MsgBox "Ouverture repertoire OK"  ' pour ouvrir, si possible, le répertoire de ce chemin
       If ShellEx("c:\tmp\toto.txt") Then MsgBox "Ouverture fichier texte ok"  'pour ouvrir, si possible, le fichier de ce chemin
       If ShellEx("c:\tmp\Liste.xls") Then MsgBox "Ouverture excel avec fichier liste.xls OK"
     
       'etc..
       'selon l'extension, etc...
    End Sub
    encore merci Jmf..

  2. #2
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    OK pour publication, Merci

  3. #3
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    comme dirai l'autre

    abondance de biens ne nuit pas




  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Citation Envoyé par bbil
    comme dirai l'autre

    abondance de biens ne nuit pas



    j'ai donc "customisé" ce sources dans un projet vb .. avec une textbox dans laquelle on peu saisir le nom du fichier ou répertoire à ouvrir...
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. [AC-2010] Erreur à l'ouverture d'un .pdf avec l'API ShellExecute
    Par -Hamadryade- dans le forum VBA Access
    Réponses: 1
    Dernier message: 15/05/2013, 10h00
  2. [À télécharger]ShellExecute : Ouverture d'un fichier/dossier
    Par SfJ5Rpw8 dans le forum Vos téléchargements VB6
    Réponses: 0
    Dernier message: 22/08/2010, 19h13
  3. API connaitre les droits sur un fichier/dossier
    Par cerede2000 dans le forum Windows
    Réponses: 9
    Dernier message: 27/10/2008, 15h17
  4. ouverture et sauvegarde de fichiers
    Par romrai dans le forum Access
    Réponses: 11
    Dernier message: 20/02/2006, 14h41
  5. [API Win32]Récupérer le nom de fichier
    Par Mayhem dans le forum Windows
    Réponses: 8
    Dernier message: 09/08/2005, 20h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo