[VB] commande shell et kill de processus

commande shell et kill de processus [VB] - VB/VBA/VBS - Programmation

Marsh Posté le 04-11-2003 à 15:24:55    

Je lance un process shell par la commande :
x = shell(blablabla) ou blabla est la commande shell.
 
je voudrais savoir comment faire pour arréter le processus lancé par cette commande pendant qu'il est en cour d'execution.
 
x représente l'handle du process.
 
Merci


Message édité par nazim2 le 04-11-2003 à 15:26:29
Reply

Marsh Posté le 04-11-2003 à 15:24:55   

Reply

Marsh Posté le 06-11-2003 à 17:37:08    

up !

Reply

Marsh Posté le 10-11-2003 à 17:26:49    

up !

Reply

Marsh Posté le 17-11-2003 à 11:20:15    

up !

Reply

Marsh Posté le 17-11-2003 à 12:46:56    

voici un petit bout de code + declaration des api qui pourrait t'aider ;)
 


Option Explicit
 
'Permet de faire une pause dans le code: Sleep 5000 (pause de 5 secondes)
'(pour laisser le temps à un process DOS de s'executer par exemple)
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'API de gestion de l'heure.
Private Declare Function timeGetTime Lib "winmm.dll" () As Long
'API d'ouverture de Process.
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
'API de fermeture de Process.
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
 
Private Const STILL_ACTIVE = &H103
Private Const PROCESS_QUERY_INFORMATION = &H400
 
Public Function ShellAndWaitForTermination( _
        sShell As String, _
        Optional ByVal eWindowStyle As VBA.VbAppWinStyle = vbNormalFocus, _
        Optional ByRef sError As String, _
        Optional ByVal lTimeOut As Long = 3600 _
    ) As Boolean
Dim hProcess As Long
Dim lR As Long
Dim bSuccess As Boolean
Dim Second As Long
     
On Error GoTo ShellAndWaitForTerminationError
     
    hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, Shell(sShell, eWindowStyle))
    If (hProcess = 0) Then
        'Impossible de lancer la ligne de commande!
        sError = "Le programme n'a pu être lancé, vérifiez votre ligne de commande."
    Else
        bSuccess = True
        Second = 0
        Do
            'Récupération du statut du process,
            'on vérifie s'il est terminé (lR = 0).
            GetExitCodeProcess hProcess, lR
            'Pause en attendant la fin de notre commande sans
            'géner l'execution des autres process.
            If Second <= lTimeOut Then
                DoEvents: Sleep 1000
                Second = Second + 1
            Else
                'Trop long!
                Call TerminateProcess(hProcess, lR)
                Call CloseHandle(hProcess)
                sError = "Trop long: Le process a été stoppé...."
                lR = 0
                bSuccess = False
            End If
        Loop While lR = STILL_ACTIVE
    End If
    ShellAndWaitForTermination = bSuccess
         
    Exit Function
 
ShellAndWaitForTerminationError:
    sError = Err.Description
    Exit Function
End Function
 


Message édité par ixemul le 17-11-2003 à 12:47:26
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed