VB3: HOWTO: Terminate Windows from a Visual Basic Application

Last reviewed: November 17, 1997
Article ID: Q76981
1.00 2.00 3.00 WINDOWS kbprg kbui

The information in this article applies to:

  • Standard and Professional Editions of Microsoft Visual Basic for Windows, versions 2.0, 3.0
  • Microsoft Visual Basic programming system for Windows, version 1.0

SUMMARY

The Visual Basic SendKeys function cannot be used to close Program Manager in order to terminate Windows. To correctly close Program Manager, you must invoke the ExitWindows API function as shown below.

Many software setup or installation programs are designed to exit Windows, and then restart Windows when the setup or installation is complete. You can make a Visual Basic program automatically exit Windows and then restart Windows by passing the EW_RESTARTWINDOWS value to the ExitWindows API function. The value for the EW_RESTARTWINDOWS constant is &H42.

MORE INFORMATION

You may want to terminate the current Windows session by closing the Program Manager from within a Visual Basic application. You may think that you can activate the Program Manager control menu and send the appropriate key sequences using the Visual Basic SendKeys function. However, this method will not work because after the Close menu item is chosen, a system modal dialog box is opened that prompts you to save changes to Program Manager. A system modal dialog box locks out ALL other programs until it is satisfied. Therefore, the keystroke you send by using the SendKeys function will never arrive in the dialog box.

To correctly close Program Manager, you must use the ExitWindows API function. You can declare this API function in the GLOBAL.BAS module. For example:

  1. Start a new project in Visual Basic.

  2. Draw a command button on the form.

  3. Add the following as a single line to GLOBAL.BAS:

       Declare Function ExitWindows Lib "user" (ByVal wReturnCode as Long,
          ByVal dwReserved as Integer) as Integer
    
    

  4. Add the following line of code to the Command button's Click procedure:

    RetVal% = ExitWindows(0,0)

  5. Save the file and then run the program.

  6. Click the command button.

The ExitWindows API call initiates the standard Windows shutdown procedure. If all applications agree to terminate, the windows session is terminated and control returns to MS-DOS. If the ExitWindows API call fails due to an open MS-DOS session or for some other reason, FALSE is returned. You should check for this and handle it appropriately.

Steps to Reproduce Behavior

  1. Start a New Project in Visual Basic.

  2. Draw a Command button on the form.

  3. In the Command button Click event procedure, add this code:

    AppActivate("Program Manager") SendKeys "%{ }{DOWN 5}{ENTER 2}", 0 'ALT, SPACE, DOWN 5, ENTER 2

  4. Save the file and then run the program.

The Program Manager does not close. If you choose the OK button with the mouse, you'll see a message stating, "Can't quit at this time." If you choose the Cancel button, you'll see a message stating, "Cannot start more than one copy of the specified program." These messages are misleading, but are the result of attempting an unsupported action.


Additional reference words: 1.00 2.00 3.00 restart start exit windows
KBCategory: kbprg kbui
KBSubcategory: APrgOther APrgWindow
Keywords : APrgOther APrgWindow kbprg kbui
Version : 1.00 2.00 3.00
Platform : WINDOWS


THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Last reviewed: November 17, 1997
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.