Stuart McLachlan
stuart at lexacorp.com.pg
Fri Mar 5 16:23:59 CST 2010
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