Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Aiuto Api ExitProcess![Lunghetto]

Sto sfruttando un modulo che ho trovato sul sito comune : Open Wait  di
Roberto Gismondi di cui riporto il codice
vhe apre un processo in questo caso NotePad.exe e aspetta la chiusura del
programma per un tot di tempo.
Se il programma viene chiuso dall'utente entro il tempo prestabilito viene
restituito il valore 0 ,
Se non viene chiuso entro il tempo prestabilito viene restituito il valore 1
in caso di errore viene restituito il valore 2
Il mio problema è che vorrei che nel caso il programma non venisse chiuso
nel tempo prestabilito(valore 1)
forzare la chiusura del  programma da codice.
Ho inserito l'api exitProcesse gli ho passato come valore l'identificativo
del processo con il risultato che mi si chiude tutto tranne il notepad.exe
!(che è quello che voglio che si chiuda)
Dove SBAGLIO???
Option Explicit
Declare Sub ExitProcess Lib "kernel32" (ByVal uExitCode As Long)
<-------Questa APi l'ho aggiunta io
Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long,
ByVal bInheritHandle As Long, ByVal dwProcessID As Long) As Long
Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long,
lpExitCode As Long) As Long
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Function OpenAndWait(StringaComando As String, Optional StileFinestra
As Integer = vbNormalFocus, Optional TempoLimite As Long = 0) As Byte
    Const RitardoCiclo = 10        ' Ritardo di ciclo espresso in
millisecondi
    Dim TempoAttesa As Long
     Dim ProcessID As Long
    Dim ProcessHandle As Long
    Dim ExCode As Long
    Dim oldExCode As Long
    On Error GoTo GestioneErrore
    'Avvio il programma:
    ProcessID = Shell(StringaComando, StileFinestra)
    'Memorizzo l'handle del processo aperto:
    ProcessHandle = OpenProcess(1, 0, ProcessID)
    'Richiamo una prima volta la funzione di controllo per
    'avere il codice che identifica il programma mentre è attivo:
    GetExitCodeProcess ProcessHandle, ExCode
    oldExCode = ExCode
    'Verifico se il parametro opzionale "TempoLimite"
    'è stato passato alla funzione :
    If TempoLimite <> 0 Then
        'Attendo fino a quando l'ExCode non cambia, e quindi significa che
        'il programma sotto controllo è terminato;
        'contemporaneamente verifico anche il tempo di attesa:
        TempoAttesa = 0
        While oldExCode = ExCode
            GetExitCodeProcess ProcessHandle, ExCode
            Sleep RitardoCiclo
            TempoAttesa = TempoAttesa + RitardoCiclo
            If TempoAttesa >= TempoLimite Then
                ' La funzione termina e restituisce
                ' la segnalazione di tempo limite superato:
                OpenAndWait = 1
                ExitProcess ProcessID    <------E l'ho posizionata qui!
                Exit Function
            End If
            DoEvents 'Consente di liberare risorse
        Wend
        Else
        'Attendo fino a quando l'ExCode non cambia, e quindi significa che
        'il programma sotto controllo è terminato;
        'poichè non è stato passato il "TempoLimite",
        'non verifico il tempo di attesa:
        While oldExCode = ExCode
            GetExitCodeProcess ProcessHandle, ExCode
            DoEvents 'Consente di liberare risorse
        Wend
     End If
    ' La funzione restituisce la segnalazione di apertura
    ' e chiusura corrette del programma esterno:
    OpenAndWait = 0
    Exit Function
GestioneErrore:
    ' La funzione restituisce la segnalazione di errore
    OpenAndWait = 2
 End Function
Grazie Per le risposte
mauro.b...@tiscalinet.it

nel tempo prestabilito(valore 1)
]zac[

L'ho Trovato ma non ci ho capito tanto perchè il modulo open wait usa lo
shell mentre il prog apri e chiudi usa l'api createprocess
non c'è un modo piu facile per inserirlo nel modulo open wait?

non c'è un modo piu facile per inserirlo nel modulo open wait?
]zac[