[AccessD] Shelling to a batch file

Stuart McLachlan stuart at lexacorp.com.pg
Fri Mar 5 18:02:52 CST 2010


It determines how the Shelled application appears.
<quote>
The windowstyle named argument has these values:
Constant Value Description 
vbHide 0  Window is hidden and focus is passed to the hidden window. 
vbNormalFocus 1 Window has focus and is restored to its original size and position. 
vbMinimizedFocus 2 Window is displayed as an icon with focus. 
vbMaximizedFocus 3 Window is maximized with focus. 
vbNormalNoFocus 4 Window is restored to its most recent size and position. The 
currently active window remains active. 
vbMinimizedNoFocus 6 Window is displayed as an icon. The currently active 
window remains active. 
</quote>
vbHide is especially useful for calling things like Blat.  The user doesn't see the DOS 
box.
-- 
Stuart

On 5 Mar 2010 at 22:31, Max Wanadoo wrote:

> What does windowstyle do?
> 
> Max
>  
> 
> -----Original Message-----
> From: accessd-bounces at databaseadvisors.com
> [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Stuart McLachlan
> Sent: Friday, March 05, 2010 10:24 PM
> To: Access Developers discussion and problem solving
> Subject: Re: [AccessD] Shelling to a batch file
> 
> Both your version and the one I have just posted have the advantage of being
> "drop in" 
> replacements for Shell.  Jim's version requires a bit more work every time
> it is used.
> 
> Your version  is not a complete replacement for Shell because it doesn't
> allow the option WindowStyle parameter.
> 
> I think I'll stick with mine :-)
> 
> --
> Stuart
> 
> On 5 Mar 2010 at 22:02, Max Wanadoo wrote:
> 
> > Hmm, I have a similar one Jim, code below.
> > 
> > Is there any value in one over the other do you think?
> > 
> > Max
> > 
> > Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As 
> > Long) As Long Private Declare Function OpenProcess Lib "kernel32" 
> > (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal 
> > dwProcessId As Long) As Long Private Declare Function 
> > WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal 
> > dwMilliseconds As Long) As Long Private Const SYNCHRONIZE = &H100000 
> > Private Const INFINITE = -1&
> > 
> > Public Sub pfRunUntilFinished(ByVal strApplication As String) ' EG: 
> > Call
> > pfRunUntilFinished("C:\AbyssWebServer\htdocs\MasterIndexCopy.bat")
> >     Dim lProcID As Long
> >     Dim hProc As Long
> >     ' Start the App
> >     lProcID = Shell("CMD /C " & strApplication, vbHide)
> >     DoEvents
> >     ' Wait for the App
> >     hProc = OpenProcess(SYNCHRONIZE, 0, lProcID)
> >     If hProc <> 0 Then
> >         WaitForSingleObject hProc, INFINITE
> >         CloseHandle hProc
> >     End If
> > exithere:
> >     Exit Sub
> > errhandler:
> >     MsgBox "pfRunUntilFinished - Errors for " & Err.Number &
> Err.Description
> >     Resume exithere
> > End Sub
> >  
> > 
> > -----Original Message-----
> > From: accessd-bounces at databaseadvisors.com
> > [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Jim Dettman
> > Sent: Friday, March 05, 2010 9:50 PM
> > To: 'Access Developers discussion and problem solving'
> > Subject: Re: [AccessD] Shelling to a batch file
> > 
> > 
> >  and for those folks that want to pause until the Shelled process has
> > finished:
> > 
> > Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal 
> > hProcess As Long, lpExitCode As Long) As LongPrivate Declare Function 
> > OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal 
> > bInheritHandle As Long, ByVal dwProcessId As Long) As Long
> > 
> > ' Used for wait check.
> > Const STILL_ACTIVE = &H103
> > Const PROCESS_QUERY_INFORMATION = &H400
> > 
> > Public Sub WaitWhileRunning(lngHWnd As Long)
> >         
> >         Dim lngExitCode As Long
> >         Dim lnghProcess As Long
> > 
> > 10      lngExitCode = STILL_ACTIVE
> > 20      lnghProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False,
> lngHWnd)
> > 
> > 30      If lnghProcess > 0 Then
> > 40        Do While lngExitCode = STILL_ACTIVE
> > 50          Call GetExitCodeProcess(lnghProcess, lngExitCode)
> > 60          DoEvents
> > 70        Loop
> > 80      End If
> > 
> > End Sub
> > 
> > Call it like this:
> > 
> >           ' Execute
> > 170       lngHWnd = Shell(strFTPScriptFile, vbHide)
> > 180       WaitWhileRunning (lngHWnd)
> > 
> > Jim.
> > 
> > -----Original Message-----
> > From: accessd-bounces at databaseadvisors.com
> > [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Brad Marks
> > Sent: Friday, March 05, 2010 4:28 PM
> > To: Access Developers discussion and problem solving
> > Subject: Re: [AccessD] Shelling to a batch file
> > 
> > Max,
> > 
> > I use the SHELL command quite a bit to fire-up .bat and .exe files 
> > from Access.
> > 
> > Below is a snippet of VBA code which you may find useful.
> > 
> > I am not sure if this will help you or not, but I thought that I would 
> > share what I have.
> > 
> > Please let me know if you have any questions.
> > 
> > Thanks,
> > Brad Marks
> > 
> > '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> > ~~
> > ~~~~~~~~~~
> > 
> > Const Four_Quotes As String = """"
> > 
> > Dim Var_String_For_Shell_Command
> > 
> > Dim Var_Program_To_Be_Initiated
> > 
> > Dim Var_Parm_Passed_To_Initiated_Program
> > 
> > 
> > Var_Program_To_Be_Initiated = "C:\Documents and Settings\ABC\My 
> > Documents\InitXcel.bat"
> > 
> > Var_Parm_Passed_To_Initiated_Program = "TEST-ABC"
> > 
> > 
> > Var_String_For_Shell_Command = _
> > Four_Quotes _
> > & Var_Program_To_Be_Initiated _
> > & Four_Quotes _
> > & " " _
> > & Four_Quotes _
> > & Var_Parm_Passed_To_Initiated_Program _ & Four_Quotes
> > 
> > MsgBox "Var_String_For_Shell_Command = " & vbLf & vbLf & 
> > Var_String_For_Shell_Command
> > 
> > Shell Var_String_For_Shell_Command
> > 
> > '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> > ~~
> > ~~~~~~~~~~~~~~
> > 
> > -----Original Message-----
> > From: accessd-bounces at databaseadvisors.com
> > [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Max Wanadoo
> > Sent: Thursday, March 04, 2010 3:36 PM
> > To: 'Access Developers discussion and problem solving'
> > Subject: [AccessD] Shelling to a batch file
> > 
> > Hi All,
> > 
> > I am struggling to get the SHELL command to run a batch file from Access.
> > 
> > Any clues  or tips?
> > 
> > The batch file in turn will run and executable in the same folder as 
> > the currentproject.path BUT this exe file is NOT installed so it is 
> > necessary to ensure that I first move to that folder and then run the
> batch.bat file.
> > 
> > Eg:
> > g\_MyTest is my currentproject.path within Access In there I have 
> > blat.exe which is not installed and which I do not want to install - 
> > so nothing in the Registry.
> > I also have blat.bat which I have created from Access.
> > I want to run the batch file which in turn will invoke the blat.exe 
> > and pass it parameters.
> > 
> > The batch file runs fine if manually invoked.  This is the last bit of 
> > running Blat from within Access.
> > I will then post the lot to the List.
> > 
> > Thanks
> > 
> > Max
> > 
> > This is where I am at:
> > 
> > Private Sub sShell(sFile)
> > 	' sfile will be "blat.bat"
> > 	const conQuote as string = """"
> >     Dim sPath As String
> >     ' move into the current folder because we havn't installed Blat.exe
> >     sPath = conQuote & " CD /D " & CurrentProject.Path & conQuote
> >     Debug.Print sPath
> >     ShellExecute Application.hWndAccessApp, "Open", sPath, "", "", 
> > vbNormalFocus
> > 
> >     ' now run the batch file
> >     'sFile = conQuote & sFile & conQuote
> >     Debug.Print sFile
> >     ShellExecute Application.hWndAccessApp, "Open", sFile, "", "", 
> > vbNormalFocus End Sub
> > 
> > 
> > --
> > AccessD mailing list
> > AccessD at databaseadvisors.com
> > http://databaseadvisors.com/mailman/listinfo/accessd
> > Website: http://www.databaseadvisors.com
> > 
> > --
> > This message has been scanned for viruses and dangerous content by 
> > MailScanner, and is believed to be clean.
> > 
> > 
> > --
> > AccessD mailing list
> > AccessD at databaseadvisors.com
> > http://databaseadvisors.com/mailman/listinfo/accessd
> > Website: http://www.databaseadvisors.com
> > 
> > --
> > AccessD mailing list
> > AccessD at databaseadvisors.com
> > http://databaseadvisors.com/mailman/listinfo/accessd
> > Website: http://www.databaseadvisors.com
> > 
> > --
> > AccessD mailing list
> > AccessD at databaseadvisors.com
> > http://databaseadvisors.com/mailman/listinfo/accessd
> > Website: http://www.databaseadvisors.com
> 
> 
> -- 
> AccessD mailing list
> AccessD at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com
> 
> -- 
> AccessD mailing list
> AccessD at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com





More information about the AccessD mailing list