Newsgroup: it.comp.lang.visual-basic
Titolo: Eseguire un applicazione ed attendere che termini

Con VB6 devo lanciare un applicazione (di shell) ed attendere che la stessa
termini prima di proseguire.
Ho provato con Shell() ma questa non attende la fine dell'applicazione in
questione.
L'ideale sarebbe inoltre poter salvare in una variabile l'ouput
dell'applicazione lanciata (che ricordo essere di shell, non window).
Qualche idea?
Ciao e grazie,
Luca

 Luca
ciaociao

 ha digitato:

Incosciente! Prima che qualcuno ti salti al collo vai a dare un occhiata
qui:
http://www.it-lang-vb.net/
 e cerca "Eseguire un programma ed attenderne la
chiusura".
avrai un pň di risposte. *Tante* altre le avrai su:
http://groups.google.it/groups?hl=it&lr=&ie=ISO-8859-1&q=+attendere+la+chius
ura+di+un%27applicazione+group%3Ait.comp.lang.visual-basic&meta=group%3Dit.c
omp.lang.visual-basic
<consiglio>
prima di postare qui cerca prima nei post vecchi.
questo argomento č stato trattato piů volte, anche recentemente, e di dritte
ne trovi.
</consiglio>
Ciao, SK
--
La pasienzia non č mai troppo (Totň).
<><><>
Esistono 10 tipi di persone: chi conosce il binario e chi no.


<cut>
Chiedo venia :-)
Grazie,
Luca

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess
As Long, lpExitCode As Long) As Long
Private Declare Function timeGetTime Lib "winmm.dll" () As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess
As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject 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 = 2000000000 _
    ) As Boolean
Dim hProcess As Long
Dim lR As Long
Dim lTimeStart As Long
Dim bSuccess As Boolean
On Error GoTo ShellAndWaitForTerminationError
    ' This is v2 which is somewhat more reliable:
    hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, Shell(sShell,
eWindowStyle))
    If (hProcess = 0) Then
        sError = "This program could not determine whether the process
started. Please watch the program and check it completes."
        ' Only fail if there is an error - this can happen when the program
completes too quickly.
    Else
        bSuccess = True
        lTimeStart = timeGetTime()
        Do
            ' Get the status of the process
            GetExitCodeProcess hProcess, lR
            ' Sleep during wait to ensure the other process gets
            ' processor slice:
            DoEvents: Sleep 100
            If (timeGetTime() - lTimeStart > lTimeOut) Then
                ' Too long!
                sError = "The process has timed out."
                lR = 0
                bSuccess = False
            End If
        Loop While lR = STILL_ACTIVE
    End If
    ShellAndWaitForTermination = bSuccess
    Exit Function
ShellAndWaitForTerminationError:
    sError = Err.Description
    msgbox sError
End Function
Ciao, Vincenzo

 Luca
Ciao, Marco
--
La pasienzia non è mai troppo (Totò).
