Executer puis Fermer plusieurs Applications Externes
madcow41
Messages postés54Date d'inscriptionvendredi 12 avril 2002StatutMembreDernière intervention11 mars 2008
-
23 août 2002 à 10:28
Downey
Messages postés5Date d'inscriptionlundi 8 avril 2002StatutMembreDernière intervention23 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 };-)
A voir également:
Executer puis Fermer plusieurs Applications Externes
cs_NuNu
Messages postés100Date d'inscriptionmercredi 29 mai 2002StatutMembreDernière intervention27 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
'
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...
Downey
Messages postés5Date d'inscriptionlundi 8 avril 2002StatutMembreDernière intervention23 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,