Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations wOOdy-Soft on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Shell Wait 1

Status
Not open for further replies.

Adamba

IS-IT--Management
Aug 3, 2001
72
GB
Hiya All [peace]

I wonder if you can help possibly? I am trying to run a dos control then copy the created file to a new directory. I have the shell code, and the file copy within my code but cannot seem to get the filecopy to wait for the shelled window to close.

Is the a wait function for shell that i can use to halt the code untill the dos prompt has closed?

I have attached the code that i am currently running, which gives me the "File cannot be found" error as the dos prompt is still creating it.

Many thanks in Advance!

Dim CurrentFile
CurrentFile = Right("00" & (Day(Date) - 2), 2) & Month(Date) & Right(Year(Date), 2)
Shell "wzzip p:\test\test" & CurrentFile & ".zip p:\test\test*.*"
FileCopy "p:\test\" & CurrentFile & ".zip", "s:\test\" & CurrentFile & ".zip"
[pc3]
Adam [glasses]
 
HI,
The WAIT in the shell command do not work properly. If you want good result, you must use API function. Just copy and past this code into a module and after all you have to do is call ExecCmd("wzzip p:\test\test" & CurrentFile & ".zip p:\test\test*.*")

Private 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

Private Type PROCESS_INFORMATION
hProcess As Long
hThread As Long
dwProcessID As Long
dwThreadID As Long
End Type

Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private 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
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long

Private Const NORMAL_PRIORITY_CLASS = &H20&
Private Const INFINITE = -1&

Public Function ExecCmd(cmdline$)
Dim proc As PROCESS_INFORMATION
Dim start As STARTUPINFO
Dim ret As Long

' Initialize the STARTUPINFO structure:
start.cb = Len(start)

' Start the shelled application:
ret = CreateProcessA(0&, cmdline$, 0&, 0&, 1&, _
NORMAL_PRIORITY_CLASS, 0&, 0&, start, proc)


' Wait for the shelled application to finish:
ret& = WaitForSingleObject(proc.hProcess, INFINITE)
Call GetExitCodeProcess(proc.hProcess, ret&)
Call CloseHandle(proc.hThread)
Call CloseHandle(proc.hProcess)
ExecCmd = ret&
End Function
Mal'chik [bigglasses]
 
Malchik
You've answered my question before I'd even thought of it!!

Matt
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top