Executer puis Fermer plusieurs Applications Externes

madcow41 Messages postés 54 Date d'inscription vendredi 12 avril 2002 Statut Membre Dernière intervention 11 mars 2008 - 23 août 2002 à 10:28
Downey Messages postés 5 Date d'inscription lundi 8 avril 2002 Statut Membre Dernière intervention 23 août 2002 - 23 août 2002 à 14:33
Dans mon prog, les utilisateurs rentrent une liste de programmes (avec leurs chemin d'EXE).

Lorsqu'un condition est vérifiée, tt les progs se lancent.
Je voudrais que lorsque la condition n'est plus vraie, tt les progs ouverts avec mon soft, ce ferment...

MaD COw };-)

2 réponses

cs_NuNu Messages postés 100 Date d'inscription mercredi 29 mai 2002 Statut Membre Dernière intervention 27 juillet 2004
23 août 2002 à 13:01
Salut,

je te propose un début d'idée

1- la fct Shell pour lancer un pgm exe

2- pour arêter une appli, je te donne un bout de code d'essai que j'ai utilisé une fois qd j'ai eu besoin d'arrêter des applis.

Mon projet ne contenait qu'1 module. L'objet de démarrage étant Sub Main.

L'appli que je tente d'arrêter est Access.

"Microsoft Access" est exactement ce qu'il y a de marqué ds la barre de titre d'Access (et aussi ds le gestionnaire des tâches)

****************
Option Explicit

Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Const WM_CLOSE = &H10
Const GW_HWNDFIRST = 0
Const GW_HWNDNEXT = 2

'
Sub Main()
Dim iResult, lResult
Dim appli As String

appli = "Microsoft Access"

Dim hwnd
Dim snull As String 'pointeur null

' Find the first window's handle
hwnd = FindWindow(snull, appli)

If hwnd <> 0 Then
iResult = MsgBox(appli & " " & "is running, do you want to terminate it?", 4, "KillApp")
If iResult = 6 Then
lResult = SendMessage(hwnd, WM_CLOSE, 0, 0&)
End If

End
End If
End Sub
****************

j'espère t'aider un peu et surtout pas t'embrouiller...

NuNu.
0
Downey Messages postés 5 Date d'inscription lundi 8 avril 2002 Statut Membre Dernière intervention 23 août 2002
23 août 2002 à 14:33
Autre proposition qui ce coup ci n'utilise pas le titre de la fenetre que tu souhaites arreter; ce qui doit mieux convenir a ton prog vu que visiblement tu ne maitrises pas les applications lancees...
En fait lors du lancement de l'application tu stockes le numero de processus de l'application recupere avec la fonction shell comme suit :

dim ProcessId:
ProcessId=Shell("ton_application.exe",0)
Si tu as plusieurs applications a lancer je te conseil de stocker chaque ProcessId relatif aux differentes applications en faisant une boucle et en enregistrant les numero de processus dans un tableau.

Ensuite tu colle ce bout de code quelque part dans ton code

'Declarations
Public Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long 'API de fermeture de Process
Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessID As Long) As Long 'Ouverture de Process
Public Const PROCESS_QUERY_INFORMATION = &H400

'Procedure qui tue un processus
Sub KillProcess(ProcessId As Integer)
Dim hProcess, Termine&
'On choppe son numero de Process
hProcess = OpenProcess(1, False, ProcessId)
' On Ferme le process lancé par un TerminateProcess (c'est plus propre :-)
Termine& = TerminateProcess(hProcess, 4)
End Sub

Et quand ta condition de fermeture des programmes est atteinte, tu parcours la variable ou le tableau qui contient tous les numeros de processus lancés puis tu utilises la fonction KillProcess en lui passant en parametre chaque numero de processus ! Le processus est tue et l'application ferme !
En esperant que ça marche ... Bon courage,

Downey
0
Rejoignez-nous