Greg Posted February 9, 2005 Report Share Posted February 9, 2005 All I have a macro that runs fine however have noticed that as part of the macro process it doesn’t appear to terminate a program completely. As a small part of the macro I basically check to see if a program is running and if so terminate it. The program disappears and I can restart at a later time OK. However through the task manager (win2000) it appears that multiple sessions of the program are still running (depends how many times the macro has run). If I were to use the mouse/keyboard (from the macro) and use the file/exit commands the program closes OK and doesn’t appear in task manager. Why would the terminate process command fail to completely close the program? Is this the best command to use? or a funny win2000 thing. Thanks in advance Greg Quote Link to comment Share on other sites More sharing options...
chris Posted February 9, 2005 Report Share Posted February 9, 2005 The TerminateProcess command will only work with one instance of a program. If you have multiple instances, then the best way to shut them all down would be to use a scrip like the one I've included below: <IVAR2:01:01:0> <REP3:08:000001:000002:0001:0:01:1> <IFOTH:06:1:PROGRAM.EXE> <TERMPROC:001000:1:F:PROGRAM.EXE> <ELSE> <IVAR2:01:01:1> <ENDIF> <ENDREP> I've placed each command on a separate line for readability only. If you copy and paste this code, you will get several TextType commands scattered throughout the script. Just remove them and you should be set. Quote Link to comment Share on other sites More sharing options...
Greg Posted February 11, 2005 Author Report Share Posted February 11, 2005 Thanks I run a similar way of terminating however it seems that if it does it on a single program it closes the one on the screen but not within the task manager. If at a later time the program is running again and the macro shuts it down, a second program item appears in the task manager (though gone from the screen), so on so on. Quote Link to comment Share on other sites More sharing options...
kevin Posted February 11, 2005 Report Share Posted February 11, 2005 When you close a running program by clicking on a menu entry, button or the X in the upper right-hand corner of the window, certain events are fired off to tell the program that you want it to close. The program may prompt you to save, it may close files or do other clean-up tasks. The Terminate Process macro command does not work the same way. It is more abrupt and should probably be used as a last resort. There are other macro commands that 'request' that a program close. The 'Window Close' command sends a 'Windows Close' message to the specified window. This will normally close the specified window. If the window is the top level window then the entire program should close. The 'Program Shut Down' command sends a 'Windows Quit' message to the program. This should tell the program to gracefully shut down, including all windows associated with the program. The program is given a chance to save and close files and do whatever cleanup is needed. The 'Terminate Process' command tries several things in an attempt to terminate a program. These things can terminate the program without giving an opportunity for a 'graceful shutdown'. The steps are: 1. Issue a 'Windows Close' message (like the 'Window Close' macro command'). 2. * Wait to see if it succeeds. 3. Issue a 'Windows Quit' message (like the Program Shut Down' macro command). 4. * Wait to see if it succeeds. 5. Issue a Quit message to the thread. 6. * Wait to see if it succeeds. 7. Issue another 'Windows Close' message. 8. * Wait to see if it succeeds. 9. And finally, if all else fails, it sends a 'Windows Terminate Process' message. For this to succeed, you must have elevated privileges. In other words, this may not work for non-administrative users. * Note: The amount of time that the command waits is determined by the 'Timeout' value entered in the 'Terminate Process' command dialog. That is the maximum time that the program waits. If the attempt succeeded in closing the program, then the macro immediately continues. If more than one instance of a program is running, the 'Terminate Process' command will attempt to terminate whichever one Windows finds first. Because the terminate process command does not allow for a graceful shutdown, you may experience certain side affects. In the specific case you describe, you may need to create a repeat loop that includes a Terminate Process command and a Delay command to shut down all instances of the program (as suggested by Chris). Quote Link to comment Share on other sites More sharing options...
Greg Posted February 14, 2005 Author Report Share Posted February 14, 2005 Thanks Kevin & Chris I've swapped to using the program shutdown and appears to be better. I noticed I had the terminte time setting at 100mSec which might not have helped either. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.