Fermer instance "explorer.exe" ouverte par "shell"

Signaler
Messages postés
1
Date d'inscription
lundi 27 août 2018
Statut
Membre
Dernière intervention
27 août 2018
-
Bonjour,

J'ai fait une macro qui fait ce que je veux, mais qui n'est pas propre. Elle ne ferme pas toutes les instances ouvertes et après 10 à 15 utilisations, windows plante...

J'ai identifé le bout de code problématique :
Dim Myshortcut As String

Myshortcut = "D:\Users\Public\Desktop\MonLien.lnk"                        
Cmd = "rundll32.exe shell32.dll, ShellExec_RunDLL"
RetVal = Shell(Cmd & " " & Myshortcut)


Lors de l'exécution de la ligne "Shell", j'ai une nouvelle instance de "explorer.exe" qui s'ouvre dans ma liste de processus :


...Et impossible de fermer cette instance, malgré plusieurs tentatives :

1er essai (ne ferme rien) :
Call Shell("TaskKill /F /PID " & CStr(RetVal), vbHide)


2ème essai (ferme mon appli mais pas explorer.exe) avec appel de cette fonction :

Function fCloseApp(lpClassName As String) As Boolean
Dim lngRet As Long, lnghWnd As Long, lngX As Long
    lnghWnd = apiFindWindow(lpClassName, vbNullString)
    If lnghWnd <> 0 Then
        lngRet = apiPostMessage(lnghWnd, WM_CLOSE, vbNull, vbNull)
        lngX = apiWaitForSingleObject(lnghWnd, INFINITE)
        fCloseApp = Not (apiIsWindow(lnghWnd) = 0)
    End If
End Function)


Je précise pour terminer (mais ça ne doit pas avoir beaucoup d'impact) que c'est du "catvba", sous Catia.

Merci d'avance !