Newsgroup: it.comp.lang.visual-basic
Titolo: Esecuzione shell da Visual Basic

Ciao a tutti.
Avrei bisogno, cortesemente della seguente informazione...
Come si puo' eseguire un comando di shell
in un programma Visual Basic
attendendo la fine del processo stesso prima di proseguire oltre?
Ciao e grazie
Alberto

 in un programma Visual Basic
C'è l'istruzione Shell.
Eventualmente c'è anche ShellExecute ma si parla di API.
Saluti,
-- 
Antonio Cangiano
Webmaster di 
www.visualcsharp.it
free.it.comp.lang.csharp
free.it.comp.lang.vbnet
free.it.comp.lang.aspnet
free.it.comp.lang.delphi
--

 Eventualmente c'è anche ShellExecute ma si parla di API.
Se deve attendere la fine dell'esecuzione del processo figlio credo che 
non possa fare a meno di usare le API. Ecco uno dei tanti esempi:
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&
Public Sub ShellAndWait(ByVal RunProg As String)
     Dim RetVal As Long
     Dim proc As PROCESS_INFORMATION
     Dim StartInf As STARTUPINFO
     StartInf.cb = Len(StartInf)
     'Execute the given path
     RetVal = CreateProcessA(0&, RunProg, 0&, 0&, 1&, _
          NORMAL_PRIORITY_CLASS, 0&, 0&, StartInf, proc)
     'Disable this app until the executed one is done
     RetVal = WaitForSingleObject(proc.hProcess, INFINITE)
     RetVal = CloseHandle(proc.hProcess)
End Sub
-- 
 __   __  ___   
|  | |  |/ __|  ICQ@Home #7317603sette 
|  |_|  |\__ \  ICQ@Work #16285702tre
|____|__||___/ 

 ha scritto nel messaggio
news:P_ck9.7981$e31.1...@twister2.libero.it...


 non possa fare a meno di usare le API.
scusate..
approfitto di questa frase per proporre un tema di discussione:
nel caso specifico richiesto da Alberto in genere io opto per la soluzione
COM
utilizzando le librerie di windows WSHOM
oltre alla Shell ci sono anche funzioni per leggere il registro di windows,
altro tema
per il quale su questo NG ho sempre visto consigliare l'utilizzo delle API
esiste un motivo preciso per cui è preferibile utilizzare API piuttosto che
le librerie ?
Ciao
Enrico

 Enrico


 Software\VB and VBA Program Settings
no no.. proprio quelle di prima :-))
guardati questo codice:
    Dim Reg As Object
    Set Reg = CreateObject("WScript.Shell")
    ConnString =
Reg.RegRead("HKLM\Software\Machi\Database\ConnectionString")
    Set Reg = Nothing
    AdoConnection.Open ConnString
HKLM sta per HKEY_LOCAL_MACHINE
Ciao
Enrico
p.s. : oggi pomeriggio ti avevo risposto dall'ufficio usando google, pero'
il post
non si è ancora presentato sul server... forse arriverà forse no.. chissa'
?? :))
ari Ciao

 HKLM sta per HKEY_LOCAL_MACHINE
Ok, ok.....ho capito che ti piace questo oggettino :-p, ma anche in 
questo caso io avrei usato un'api, e sarebbe bastata una riga :)


 questo caso io avrei usato un'api, e sarebbe bastata una riga :)
2 con la declare! :-p
Ciao
Enrico