ACC: How to Wait for a Shelled Process to FinishID: Q99940
|
Advanced: Requires expert coding, interoperability, and multiuser skills.
When you are using the Shell() function or the RunApp macro action to
run another program or process, Microsoft Access does not wait for the
shelled process to finish before processing the next line in the macro
or function. This causes problems for macros and functions whose
subsequent actions depend on the results of the shelled process.
This article demonstrates a Microsoft Access function called WaitShell()
that, given an application name or process to run, starts the process and
waits for it to terminate.
The following Microsoft Access function, WaitShell(), uses
GetModuleUsage(), a Microsoft Windows API function, to determine if the
shelled process has terminated. The Shell() function, if it successfully
starts the process, returns a handle to the process module. If the process
is no longer running, the handle is invalid and the GetModuleUsage()
function returns a value of 0. The WaitShell() function simply loops until
the module is no longer valid.
NOTE: You may have the following GetModuleUsage() Windows API function
defined in an existing Microsoft Access library. If you receive a
duplicate procedure name error message, delete the Declare statement
from your code.
Option Explicit
Declare Function GetModuleUsage% Lib "Kernel" (ByVal hModule%)
Function WaitShell( AppName as String)
Dim hMod as Integer
hMod = Shell(AppName, 1)
If (Abs(hMod) > 32) then
While (GetModuleUsage(hMod))
DoEvents
Wend
Else
MsgBox "Unable to start " & AppName
End If
End Function
To test the function, create and run the following Microsoft Access
macro:
Action
------
RunCode
MsgBox
Macro Actions
-------------------------------------------
RunCode
Function Name: =WaitShell("Command.com")
MsgBox
Message: Done!
-or-
run the following Microsoft Access function:
Function TestWaitShell()
x=WaitShell("Command.com")
MsgBox "Done!"
End Function
For more information about using the Shell function in Microsoft Access 7.0
and 97, please see the following article in the Microsoft Knowledge Base:
Q178116 How to Determine When a Shelled Process Ends
Microsoft Windows "Programmer's Reference, Volume 2: Functions,"
version 3.1, pages 403-404
Additional query words: terminate basic shell
Keywords : kbinterop kbprg
Version : WINDOWS:1.0,1.1,2.0
Platform : WINDOWS
Issue type : kbhowto
Last Reviewed: March 23, 1999