| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- Option Compare Database
- '****
- '*
- '* Shell: use shell commands
- '*
- '****
- Private Const STARTF_USESHOWWINDOW& = &H1
- Private Const NORMAL_PRIORITY_CLASS = &H20&
- Private Const INFINITE = -1&
- 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
-
- Public Sub ShellWait(Pathname As String, Optional WindowStyle As Long)
- ' run a shell command and waits for its ending before return
- Dim proc As PROCESS_INFORMATION
- Dim start As STARTUPINFO
- Dim ret As Long
- ' Initialize the STARTUPINFO structure:
- With start
- .cb = Len(start)
- If Not IsMissing(WindowStyle) Then
- .dwFlags = STARTF_USESHOWWINDOW
- .wShowWindow = WindowStyle
- End If
- End With
- ' Start the shelled application:
- ret& = CreateProcessA(0&, Pathname, 0&, 0&, 1&, _
- NORMAL_PRIORITY_CLASS, 0&, 0&, start, proc)
- ' Wait for the shelled application to finish:
- ret& = WaitForSingleObject(proc.hProcess, INFINITE)
- ret& = CloseHandle(proc.hProcess)
- End Sub
- Public Function cmd(ByVal command As String, Optional WindowStyle As Long = vbHide, Optional in_dir As String = "")
- ' runs a comand with windows command line
- If Len(in_dir) = 0 Then in_dir = CurrentProject.path
- Call ShellWait("cmd.exe /r cd " & in_dir & " & " & command, WindowStyle)
- End Function
|