Perchè non cambi la funzione che determina la fine del processo di decompressione? Io ad esempio uso la segente funzione:
codice:
'Shell per il Backup - programma VB resta in attesa che
'il programma lanciato termini:
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 Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Const STILL_ACTIVE = &H103
Const PROCESS_QUERY_INFORMATION = &H400
codice:
'Funzione per la copia ed il Backup:
Function RikShell(exe As String, Optional WinStyle) As Integer
Dim processid As Long
Dim hprocess As Long
Dim exitcode As Long
Dim parm As Integer
'Controllo il parametro opzionale finestra:
Select Case VarType(WinStyle)
Case vbEmpty, vbNull, vbError
parm = vbHide
Case vbLong, vbInteger, vbSingle, vbDouble
parm = WinStyle
Case Else
parm = vbHide
End Select
'Prelevo l'ID del processo lanciato:
processid = Shell(exe, parm)
'Creo un Handle per quel processo:
hprocess = OpenProcess(PROCESS_QUERY_INFORMATION, False, processid)
Do
'Controlla ripetutamente che termini la copia o il backup:
Call GetExitCodeProcess(hprocess, exitcode)
'Lascio libero il sistema di processare le altre applicazioni:
DoEvents
Loop While (exitcode = STILL_ACTIVE)
CloseHandle (hprocess)
End Function
codice:
'Funzione per continuare con il programma al termine del backup - Modulo Connessione :
RikShell "C:\Windows\system32\ntbackup.exe backup " & Chr$(34) & FolOrig & Chr$(34) & " /M copy /V:yes /F " & Chr$(34) & ValoreDir & Chr$(34)
In questo modo il controllo viene restituito al programma solo quando è finito il ciclo di decompressione.
Mi interesserebbe comunque il tuo codice, forse posso migliorare quello esposto.