Carte du site
 Remerciements
 Netiquette
 Bugs
 Tables
 Requêtes
 Formulaires
 États (rapports)
 Modules
 APIs
 Chaînes
 Date/Time
 Général
 Ressources
 Téléchargeables

 Termes d'usage

APIs: Démarre une appli avec ShellExecute

Author(s)
Dev Ashish

Démarre une appli avec ShellExecute.

(Q)    Comment démarrer l'application associée à un fichier dont l'extension est enregistrée sous Windows (My Computer, View, Folder Options... , onglet  File Types) ?

(A)    Vous pouvez utiliser la fonction API  ShellExecute à cette fin. Fournir le nom du fichier à  fHandleFile. Si l'extension du fichier n'est pas associée à une application, un dialogue "Open With" sera présenté à l'utilisateur.

'************ Code Start **********
Private Declare Function apiShellExecute 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

'***App Window Constants***
Public Const WIN_NORMAL = 1         'Open Normal
Public Const WIN_MAX = 3            'Open Maximized
Public Const WIN_MIN = 2            'Open Minimized

'***Error Codes***
Private Const ERROR_SUCCESS = 32&
Private Const ERROR_NO_ASSOC = 31&
Private Const ERROR_OUT_OF_MEM = 0&
Private Const ERROR_FILE_NOT_FOUND = 2&
Private Const ERROR_PATH_NOT_FOUND = 3&
Private Const ERROR_BAD_FORMAT = 11&

'***************Exemples d'utilisation***********************
'Ouvrir un répertoire:       ?fHandleFile("C:\TEMP\",WIN_NORMAL)
'Pour envoyer un courriel: ?fHandleFile("mailto:dash10@hotmail.com",WIN_NORMAL)
'Ouvrir selon un URL:        ?fHandleFile("http://home.att.net/~dashish", WIN_NORMAL)
'Traiter les extensions inconnue (call Open With Dialog):
'                             ?fHandleFile("C:\TEMP\TestThis",Win_Normal)
'Démarrer Access:
'                             ?fHandleFile("I:\mdbs\CodeNStuff.mdb", Win_NORMAL)
'****************************************************

Function fHandleFile(stFile As String, lShowHow As Long)
Dim lRet As Long, varTaskID As Variant
Dim stRet As String
    'First try ShellExecute
    lRet = apiShellExecute(hWndAccessApp, vbNullString, _
            stFile, vbNullString, vbNullString, lShowHow)
            
    If lRet > ERROR_SUCCESS Then
        stRet = vbNullString
        lRet = -1
    Else
        Select Case lRet
            Case ERROR_NO_ASSOC:
                'Try the OpenWith dialog
                varTaskID = Shell("rundll32.exe shell32.dll,OpenAs_RunDLL " _
                        & stFile, WIN_NORMAL)
                lRet = (varTaskID <> 0)
            Case ERROR_OUT_OF_MEM:
                stRet = "Error: Out of Memory/Resources. Couldn't Execute!"
            Case ERROR_FILE_NOT_FOUND:
                stRet = "Error: File not found.  Couldn't Execute!"
            Case ERROR_PATH_NOT_FOUND:
                stRet = "Error: Path not found. Couldn't Execute!"
            Case ERROR_BAD_FORMAT:
                stRet = "Error:  Bad File Format. Couldn't Execute!"
            Case Else:
        End Select
    End If
    fHandleFile = lRet & _
                IIf(stRet = "", vbNullString, ", " & stRet)
End Function
'************ Code End **********

Note: sous certains systèmes, tel que sous Windows 98, on peut également simplement faire:

Shell "Start C:\MonFichier.txt"

et l'application associée à l'extension txt démarre, avec le fichier nommé comme "projet".

© 1998-2001, Dev Ashish, All rights reserved. Optimized for Microsoft Internet Explorer