Comment capturer le code d'erreur avec l'API ShellExecute ?
4 réponses
Teddy
Bonjour,
Je cherche désespérément comment récupérer le code d'erreur retourné si l'ouverture d'un
fichier documentaire avec le logiciel associé dans l'OS échoue avec l'API ShellExecute.
S'il y a un problème, on n'a pas de remontée d'erreur dans Err.Number apparemment.
D'autre part, si je cherche à ouvrir la messagerie par défaut avec l'API ShellExecute en
mettant en tant que document à ouvrir la chaîne
"mailto:adresse@toto.com?subject=MonSujet&body=Corps-du-Message", ça fonctionne bien avec
Outlook Express mais pas avec Outlook.
Outlook 2003 n'accepte peut-être pas ce genre de paramètre pourtant ça marche lorsque
c'est dans un lien d'une page WEB.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Drizzit
Source trouvé sur le site de microsoft : http://support.microsoft.com/default.aspx?scid=kb;fr;170918
Option Explicit
Private Declare Function ShellExecute Lib "shell32.dll" Alias _ "ShellExecuteA" (ByVal hwnd As Long, ByVal lpszOp As _ String, ByVal lpszFile As String, ByVal lpszParams As String, _ ByVal lpszDir As String, ByVal FsShowCmd As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Function StartDoc(DocName As String) As Long Dim Scr_hDC As Long Scr_hDC = GetDesktopWindow() StartDoc = ShellExecute(Scr_hDC, "Open", DocName, _ "", "C:", SW_SHOWNORMAL) End Function
Private Sub Form_Click() Dim r As Long, msg As String r = StartDoc("C:WINDOWSARCADE.BMP") If r <= 32 Then 'Une erreur s'est produite Select Case r Case SE_ERR_FNF msg = "Fichier introuvable" Case SE_ERR_PNF msg = "Chemin introuvable" Case SE_ERR_ACCESSDENIED msg = "Accès refusé" Case SE_ERR_OOM msg = "Mémoire insuffisante" Case SE_ERR_DLLNOTFOUND msg = "DLL introuvable" Case SE_ERR_SHARE msg = "Violation de partage" Case SE_ERR_ASSOCINCOMPLETE msg = "Association de fichier incomplète ou incorrecte" Case SE_ERR_DDETIMEOUT msg = "Expiration de délai DDE" Case SE_ERR_DDEFAIL msg = "Échec de la transaction DDE" Case SE_ERR_DDEBUSY msg = "DDE occupé" Case SE_ERR_NOASSOC msg = "Pas d'association pour l'extension de fichier" Case ERROR_BAD_FORMAT msg = "Fichier EXE incorrect ou erreur dans l'image EXE" Case Else msg = "Erreur inconnue" End Select MsgBox msg End If End Sub
Source trouvé sur le site de microsoft :
http://support.microsoft.com/default.aspx?scid=kb;fr;170918
Option Explicit
Private Declare Function ShellExecute Lib "shell32.dll" Alias _
"ShellExecuteA" (ByVal hwnd As Long, ByVal lpszOp As _
String, ByVal lpszFile As String, ByVal lpszParams As String, _
ByVal lpszDir As String, ByVal FsShowCmd As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Function StartDoc(DocName As String) As Long
Dim Scr_hDC As Long
Scr_hDC = GetDesktopWindow()
StartDoc = ShellExecute(Scr_hDC, "Open", DocName, _
"", "C:", SW_SHOWNORMAL)
End Function
Private Sub Form_Click()
Dim r As Long, msg As String
r = StartDoc("C:WINDOWSARCADE.BMP")
If r <= 32 Then
'Une erreur s'est produite
Select Case r
Case SE_ERR_FNF
msg = "Fichier introuvable"
Case SE_ERR_PNF
msg = "Chemin introuvable"
Case SE_ERR_ACCESSDENIED
msg = "Accès refusé"
Case SE_ERR_OOM
msg = "Mémoire insuffisante"
Case SE_ERR_DLLNOTFOUND
msg = "DLL introuvable"
Case SE_ERR_SHARE
msg = "Violation de partage"
Case SE_ERR_ASSOCINCOMPLETE
msg = "Association de fichier incomplète ou
incorrecte"
Case SE_ERR_DDETIMEOUT
msg = "Expiration de délai DDE"
Case SE_ERR_DDEFAIL
msg = "Échec de la transaction DDE"
Case SE_ERR_DDEBUSY
msg = "DDE occupé"
Case SE_ERR_NOASSOC
msg = "Pas d'association pour l'extension de
fichier"
Case ERROR_BAD_FORMAT
msg = "Fichier EXE incorrect ou erreur dans
l'image EXE"
Case Else
msg = "Erreur inconnue"
End Select
MsgBox msg
End If
End Sub
Source trouvé sur le site de microsoft : http://support.microsoft.com/default.aspx?scid=kb;fr;170918
Option Explicit
Private Declare Function ShellExecute Lib "shell32.dll" Alias _ "ShellExecuteA" (ByVal hwnd As Long, ByVal lpszOp As _ String, ByVal lpszFile As String, ByVal lpszParams As String, _ ByVal lpszDir As String, ByVal FsShowCmd As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Function StartDoc(DocName As String) As Long Dim Scr_hDC As Long Scr_hDC = GetDesktopWindow() StartDoc = ShellExecute(Scr_hDC, "Open", DocName, _ "", "C:", SW_SHOWNORMAL) End Function
Private Sub Form_Click() Dim r As Long, msg As String r = StartDoc("C:WINDOWSARCADE.BMP") If r <= 32 Then 'Une erreur s'est produite Select Case r Case SE_ERR_FNF msg = "Fichier introuvable" Case SE_ERR_PNF msg = "Chemin introuvable" Case SE_ERR_ACCESSDENIED msg = "Accès refusé" Case SE_ERR_OOM msg = "Mémoire insuffisante" Case SE_ERR_DLLNOTFOUND msg = "DLL introuvable" Case SE_ERR_SHARE msg = "Violation de partage" Case SE_ERR_ASSOCINCOMPLETE msg = "Association de fichier incomplète ou incorrecte" Case SE_ERR_DDETIMEOUT msg = "Expiration de délai DDE" Case SE_ERR_DDEFAIL msg = "Échec de la transaction DDE" Case SE_ERR_DDEBUSY msg = "DDE occupé" Case SE_ERR_NOASSOC msg = "Pas d'association pour l'extension de fichier" Case ERROR_BAD_FORMAT msg = "Fichier EXE incorrect ou erreur dans l'image EXE" Case Else msg = "Erreur inconnue" End Select MsgBox msg End If End Sub
Drizzit
Pardon, je n'ai pas lu la totalité de la question. Pour ma part l'instruction "mailto:...." m' ouvre bien l'application Outlook qui est mon application courrier par défaut, Outlook express étant installé également sur le poste.
Pardon, je n'ai pas lu la totalité de la question.
Pour ma part l'instruction "mailto:...." m' ouvre bien l'application
Outlook qui est mon application courrier par défaut, Outlook express
étant installé également sur le poste.
Pardon, je n'ai pas lu la totalité de la question. Pour ma part l'instruction "mailto:...." m' ouvre bien l'application Outlook qui est mon application courrier par défaut, Outlook express étant installé également sur le poste.
Guy DETIENNE
Salut ;O)
Normalement, on utilisera l'API GetLastError pour connaître le dernier code d'erreur retourné par une API. Malheureusement, il est fortement déconseillé de l'utiliser via VB car il est fréquent que le code retourné soit différent de ce qui est attendu.
Explication : Lors de l'exécution d'un programme VB, le runtime utilise en interne un paquet d'API's, donc il est probable que le dernier message d'erreur renvoyé sera l'utilisation de l'API du runtime et non celle de l'API de notre exécutable.
Pour contourner cet épineux problème, on utilisera la propriété LastDLLError de l'objet Err.
Ce que dit l'aide VB sur LastDLLError : ----------------------------------------------------------- Renvoie un code d'erreur système produit par un appel à unebibliothèque de liaisons dynamiques (DLL). Propriété en lecture seule.
Remarques La propriété LastDLLError s'applique uniquement aux appels aux DLL issues de code Visual Basic. Lorsque ce type d'appel est effectué, la fonction appelée renvoie généralement un code indiquant le succès ou l'échec. La propriété LastDLLError est alors définie. Consultez la documentation relative aux fonctions DLL pour déterminer quelles valeurs renvoyées indiquent un succès ou un échec. Lors d'un échec, Visual Basic doit immédiatement vérifier la propriété LastDLLError. Aucune exception n'est générée lorsque la propriété LastDLLError est définie. -----------------------------------------------------------
Courage !
Guy
" Teddy" a écrit dans le message de news:
Bonjour,
Je cherche désespérément comment récupérer le code d'erreur retourné si
l'ouverture d'un
fichier documentaire avec le logiciel associé dans l'OS échoue avec l'API
ShellExecute.
S'il y a un problème, on n'a pas de remontée d'erreur dans Err.Number
apparemment.
D'autre part, si je cherche à ouvrir la messagerie par défaut avec l'API
ShellExecute en
mettant en tant que document à ouvrir la chaîne "mailto:?subject=MonSujet&body=Corps-du-Message", ça
fonctionne bien avec
Outlook Express mais pas avec Outlook.
Outlook 2003 n'accepte peut-être pas ce genre de paramètre pourtant ça
marche lorsque
c'est dans un lien d'une page WEB.
Auriez vous une idée ?
Merci beaucoup. Ted
Salut ;O)
Normalement, on utilisera l'API GetLastError pour connaître le dernier code
d'erreur retourné par une API.
Malheureusement, il est fortement déconseillé de l'utiliser via VB car il
est fréquent que le code retourné soit différent de ce qui est attendu.
Explication :
Lors de l'exécution d'un programme VB, le runtime utilise en interne un
paquet d'API's, donc il est probable que le dernier message d'erreur renvoyé
sera l'utilisation de l'API du runtime et non celle de l'API de notre
exécutable.
Pour contourner cet épineux problème, on utilisera la propriété LastDLLError
de l'objet Err.
Ce que dit l'aide VB sur LastDLLError :
-----------------------------------------------------------
Renvoie un code d'erreur système produit par un appel à unebibliothèque de
liaisons dynamiques (DLL). Propriété en lecture seule.
Remarques
La propriété LastDLLError s'applique uniquement aux appels aux DLL issues de
code Visual Basic. Lorsque ce type d'appel est effectué, la fonction appelée
renvoie généralement un code indiquant le succès ou l'échec. La propriété
LastDLLError est alors définie. Consultez la documentation relative aux
fonctions DLL pour déterminer quelles valeurs renvoyées indiquent un succès
ou un échec. Lors d'un échec, Visual Basic doit immédiatement vérifier la
propriété LastDLLError. Aucune exception n'est générée lorsque la propriété
LastDLLError est définie.
-----------------------------------------------------------
Courage !
Guy
" Teddy" <teddy@wanadoo.fr> a écrit dans le message de
news:e5VFKkyNGHA.4052@TK2MSFTNGP15.phx.gbl...
Bonjour,
Je cherche désespérément comment récupérer le code d'erreur retourné si
l'ouverture d'un
fichier documentaire avec le logiciel associé dans l'OS échoue avec l'API
ShellExecute.
S'il y a un problème, on n'a pas de remontée d'erreur dans Err.Number
apparemment.
D'autre part, si je cherche à ouvrir la messagerie par défaut avec l'API
ShellExecute en
mettant en tant que document à ouvrir la chaîne
"mailto:adresse@toto.com?subject=MonSujet&body=Corps-du-Message", ça
fonctionne bien avec
Outlook Express mais pas avec Outlook.
Outlook 2003 n'accepte peut-être pas ce genre de paramètre pourtant ça
Normalement, on utilisera l'API GetLastError pour connaître le dernier code d'erreur retourné par une API. Malheureusement, il est fortement déconseillé de l'utiliser via VB car il est fréquent que le code retourné soit différent de ce qui est attendu.
Explication : Lors de l'exécution d'un programme VB, le runtime utilise en interne un paquet d'API's, donc il est probable que le dernier message d'erreur renvoyé sera l'utilisation de l'API du runtime et non celle de l'API de notre exécutable.
Pour contourner cet épineux problème, on utilisera la propriété LastDLLError de l'objet Err.
Ce que dit l'aide VB sur LastDLLError : ----------------------------------------------------------- Renvoie un code d'erreur système produit par un appel à unebibliothèque de liaisons dynamiques (DLL). Propriété en lecture seule.
Remarques La propriété LastDLLError s'applique uniquement aux appels aux DLL issues de code Visual Basic. Lorsque ce type d'appel est effectué, la fonction appelée renvoie généralement un code indiquant le succès ou l'échec. La propriété LastDLLError est alors définie. Consultez la documentation relative aux fonctions DLL pour déterminer quelles valeurs renvoyées indiquent un succès ou un échec. Lors d'un échec, Visual Basic doit immédiatement vérifier la propriété LastDLLError. Aucune exception n'est générée lorsque la propriété LastDLLError est définie. -----------------------------------------------------------
Courage !
Guy
" Teddy" a écrit dans le message de news:
Bonjour,
Je cherche désespérément comment récupérer le code d'erreur retourné si
l'ouverture d'un
fichier documentaire avec le logiciel associé dans l'OS échoue avec l'API
ShellExecute.
S'il y a un problème, on n'a pas de remontée d'erreur dans Err.Number
apparemment.
D'autre part, si je cherche à ouvrir la messagerie par défaut avec l'API
ShellExecute en
mettant en tant que document à ouvrir la chaîne "mailto:?subject=MonSujet&body=Corps-du-Message", ça
fonctionne bien avec
Outlook Express mais pas avec Outlook.
Outlook 2003 n'accepte peut-être pas ce genre de paramètre pourtant ça
marche lorsque
c'est dans un lien d'une page WEB.
Auriez vous une idée ?
Merci beaucoup. Ted
Teddy
Merci pour vos réponses. Le code retourné par Err.LastDllError est une bonne solution. Ca marche impeccable !
Teddy
" Teddy" a écrit dans le message de news:
Bonjour,
Je cherche désespérément comment récupérer le code d'erreur retourné si l'ouverture d'un fichier documentaire avec le logiciel associé dans l'OS échoue avec l'API ShellExecute.
S'il y a un problème, on n'a pas de remontée d'erreur dans Err.Number apparemment.
D'autre part, si je cherche à ouvrir la messagerie par défaut avec l'API ShellExecute en mettant en tant que document à ouvrir la chaîne "mailto:?subject=MonSujet&body=Corps-du-Message", ça fonctionne bien avec Outlook Express mais pas avec Outlook.
Outlook 2003 n'accepte peut-être pas ce genre de paramètre pourtant ça marche lorsque c'est dans un lien d'une page WEB.
Auriez vous une idée ?
Merci beaucoup. Ted
Merci pour vos réponses.
Le code retourné par Err.LastDllError est une bonne solution.
Ca marche impeccable !
Teddy
" Teddy" <teddy@wanadoo.fr> a écrit dans le message de news:
e5VFKkyNGHA.4052@TK2MSFTNGP15.phx.gbl...
Bonjour,
Je cherche désespérément comment récupérer le code d'erreur retourné si l'ouverture d'un
fichier documentaire avec le logiciel associé dans l'OS échoue avec l'API ShellExecute.
S'il y a un problème, on n'a pas de remontée d'erreur dans Err.Number apparemment.
D'autre part, si je cherche à ouvrir la messagerie par défaut avec l'API ShellExecute en
mettant en tant que document à ouvrir la chaîne
"mailto:adresse@toto.com?subject=MonSujet&body=Corps-du-Message", ça fonctionne bien
avec Outlook Express mais pas avec Outlook.
Outlook 2003 n'accepte peut-être pas ce genre de paramètre pourtant ça marche lorsque
c'est dans un lien d'une page WEB.
Merci pour vos réponses. Le code retourné par Err.LastDllError est une bonne solution. Ca marche impeccable !
Teddy
" Teddy" a écrit dans le message de news:
Bonjour,
Je cherche désespérément comment récupérer le code d'erreur retourné si l'ouverture d'un fichier documentaire avec le logiciel associé dans l'OS échoue avec l'API ShellExecute.
S'il y a un problème, on n'a pas de remontée d'erreur dans Err.Number apparemment.
D'autre part, si je cherche à ouvrir la messagerie par défaut avec l'API ShellExecute en mettant en tant que document à ouvrir la chaîne "mailto:?subject=MonSujet&body=Corps-du-Message", ça fonctionne bien avec Outlook Express mais pas avec Outlook.
Outlook 2003 n'accepte peut-être pas ce genre de paramètre pourtant ça marche lorsque c'est dans un lien d'une page WEB.