Newsgroup: it.comp.lang.visual-basic
Titolo: Attesa dopo Shell

Ciao a tutti,
ho il seguente problema con la funzione SHELL:
in un'applicazione che sto realizzando chiamo un piccolo eseguibile
con un comando del tipo
Shell "C:\GSC\BIN\GSC.EXE -c " & ParString & " > gscdata.tmp", vbHide
poi vado a leggere il risultato nel file gscdata.tmp che ho così
creato e lo utilizzo.
Il problema è che spesso la lettura del file inizia prima che questo
sia stato completato da GSC.EXE causando evidentemente un errore.
Chiedo scusa per la banalità della domanda, ma esiste un modo per far
si che VB6 attenda il completamento del comando lanciato da SHELL
prima di continuare con l'elaborazione?
Grazie in anticipo.

 prima di continuare con l'elaborazione?
metti questo codice in un modulo base
Option Explicit
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Type STARTUPINFO
        cb As Long
        lpReserved As String
        lpDesktop As String
        lpTitle As String
        dwX As Long
        dwY As Long
        dwXSize As Long
        dwYSize As Long
        dwXCountChars As Long
        dwYCountChars As Long
        dwFillAttribute As Long
        dwFlags As Long
        wShowWindow As Integer
        cbReserved2 As Integer
        lpReserved2 As Long
        hStdInput As Long
        hStdOutput As Long
        hStdError As Long
        End Type
        Public Type PROCESS_INFORMATION
        hProcess As Long
        hThread As Long
        dwProcessID As Long
        dwThreadID As Long
End Type
Public Declare Function WaitForSingleObject Lib "kernel32" (ByVal _
        hHandle As Long, ByVal dwMilliseconds As Long) As Long
Public Declare Function CreateProcessA Lib "kernel32" (ByVal _
        lpApplicationName As Long, ByVal lpCommandLine As String, ByVal _
        lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, _
        ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, _
        ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As Long, _
        lpStartupInfo As STARTUPINFO, lpProcessInformation As _
        PROCESS_INFORMATION) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal _
        hObject As Long) As Long
Public Const NORMAL_PRIORITY_CLASS = &H20&
Public Const INFINITE = -1&
'#########################################################
'Funzione per lanciare un programma in sincrono.
'Il programma lanciato in finestra viene 'atteso' per
'tutta la sua durata.
'Una funzione usata per lanciare un programma MS-DOS
'e attendere la sua fine.
'1998 by Berardi Paolo
'Email 
pber...@nt.kjws.com
'#########################################################
Public Sub ShellAndWait(ByVal RunProg As String)
    Dim RetVal As Long
    Dim proc As PROCESS_INFORMATION
    Dim StartInf As STARTUPINFO
    StartInf.cb = Len(StartInf)
    'Crea sessione del programma da lanciare
    RetVal = CreateProcessA(0&, RunProg, 0&, 0&, 1&, NORMAL_PRIORITY_CLASS,
0&, 0&, StartInf, proc)
    RetVal = WaitForSingleObject(proc.hProcess, INFINITE)
    RetVal = CloseHandle(proc.hProcess)
End Sub
poi quando ti serve
Call ShellAndWait("percorso e nome file")
-- 
Le persone non sono il proprio comportamento: devi sempre andare oltre,
essere flessibile, capire il punto di vista degli altri, interpretarne i
comportamenti ed intuirne le esigenze.
Per rispondere in privato elimina
dall'indirizzo "togliquesto"
MasterDavidex
David Ruscelli

"Ivaldo Cervini"
WaitForSingleObject
http://www.allapi.net/cgi-bin/redirect.cgi?place=apiguide
'vbs exec
Dim WshShell, oExec
Set WshShell = CreateObject("WScript.Shell")
Set oExec = WshShell.Exec("calc")
Do While oExec.Status = 0
     WScript.Sleep 100
Loop
WScript.Echo oExec.Status
'vbs run
'object.Run(strCommand, [intWindowStyle], [bWaitOnReturn])
bWaitOnReturn
Optional. Boolean value indicating whether the script should wait for the program to finish executing before continuing to the
next statement in your script. If set to true, script execution halts until the program finishes, and Run returns any error code
returned by the program. If set to false (the default), the Run method returns immediately after starting the program,
automatically returning 0 (not to be interpreted as an error code).
'Cerca e scrive su file  tutti i *.txt del HD
set oShell = CreateObject("WScript.Shell")
oShell.run"%comspec% /c dir /s /b c:\*.txt >tmpfiles.txt",0,true
Msgbox"fatto"
--
Fosco