[AccessD] Shelling to a batch file

Max Wanadoo max.wanadoo at gmail.com
Fri Mar 5 16:02:41 CST 2010


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




More information about the AccessD mailing list