Executer puis Fermer plusieurs Applications Externes

Signaler
Messages postés
54
Date d'inscription
vendredi 12 avril 2002
Statut
Membre
Dernière intervention
11 mars 2008
-
Messages postés
5
Date d'inscription
lundi 8 avril 2002
Statut
Membre
Dernière intervention
23 août 2002
-
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

Messages postés
100
Date d'inscription
mercredi 29 mai 2002
Statut
Membre
Dernière intervention
27 juillet 2004

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
Messages postés
5
Date d'inscription
lundi 8 avril 2002
Statut
Membre
Dernière intervention
23 août 2002

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