Jag vill dra igång ett program ifrån min vb-kod, med shell eller shellexecute eller liknande, men invänta detta programs exekverande och avlutande innan jag fortsätter min kod. Går detta att lösa? Frågan var uppe för någon månad sen. Gör du en sökning hittar du Hej Så här gjorde jag med ett DOS-prog som körs i osynligt i bakgrunden. När det är klart så fortsätter mitt VB programm. Funkar alldeles utmärkt. Hoppas det gör detsamma för digInvänta programs exekverande vid Shell
Sv: Invänta programs exekverande vid Shell
säkert något som kan hjälpa dig... =)
//EmmaSv: Invänta programs exekverande vid Shell
Ett principexempel hur du kan göra med Vb:s Shell
Loopen snurrar tills du får ett returvärde från Shell.
Dim ret As Long ' ProcessId
ret = Shell("WinHlp32.exe " & _
SearchPath & "MinHjälp.hlp", vbNormalFocus)
'Den här loopen går tills Shell lämnar ett ProcessId
Do Until ret <> 0
DoEvents
Loop
End Sub
mvh
SvenVassego, här är en fungerande lösning
<code>
i Form:
Dim lngHandtag As Long
Dim lngTemp As Long
Dim lngDummy As Long
DoEvents
lngDummy = Shell('vad du nu ska starta', vbHide)
If lngDummy <> 0 Then
lngHandtag = OpenProcess(SYNCHRONIZE, 0, lngDummy)
If lngHandtag <> 0 Then
lngTemp = WaitForSingleObject(lngHandtag, INFINITE)
CloseHandle (lngHandtag)
End If
Else
'någon felhantering om ditt shell-prog skulle balla ur
Exit Sub
End If
i Modul:
Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Const SYNCHRONIZE = &H100000
Public Const INFINITE = &HFFFF
Public Const WAIT_OBJECT_0 = 0
Public Const WAIT_TIMEOUT = &H102
</code>
Good Luck
/W