Titre: Lance fichier.
Description:
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.
Le code:
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" End Sub |