ID Number: Q72674
1.00
WINDOWS
Summary:
From a Visual Basic program, you can disable the ability to switch to
other Windows programs by calling the Windows 3.0 API function
SetSysModalWindow.
This information applies to Microsoft Visual Basic programming system
version 1.0 for Windows.
More Information:
Microsoft Windows is designed so that the user can switch between
applications without terminating one program to run another program.
There may be times when the program needs to take control of the
entire environment and run from only one window, restricting the user
from switching to any other application. An example of this is a
simple security system, or a time-critical application that may need
to go uninterrupted for long periods of time.
Passing the handle to the window through the argument of
SetSysModalWindow will limit the user to that particular window. This
will not allow the user to move to any other applications with the
mouse or use ALT+ESC or CTRL+ESC to bring up the Task Manager. You can
even remove the system menu if you do not want the user to exit
through the ALT+F4 (Close) combination.
All child windows that are created by the system-modal window become
system-modal windows. When the original window becomes active again,
it is system-modal. To end the system-modal state, destroy the
original system-modal window.
Care must be taken when using the SetSysModalWindow API from within
the Visual Basic programming environment. Pressing CTRL+BREAK to get
to the [break] mode leaves your modal form with no way to exit unless
you restart your system. When using the SetSysModalWindow within the
environment, be sure to exit your application by destroying the window
with either the ALT+F4 in the system menu, or by some other means from
within your running program.
To use the SetSysModalWindow API function, declare the API call in
your global section, as follows:
Declare Function SetSysModalWindow Lib "User" (ByVal hwnd%) As Integer
At an appropriate place in your code, add the following:
Success% = SetSysModalWindow(hwnd)
Once this line is executed, your window will be the only window that
can get focus until that window is destroyed.
Note: Because Visual Basic was not designed with system modal
capabilities in mind, using a MsgBox, InputBox, or Form.Show of
another form from a system modal window will not work correctly. If
you want to show another window from a system modal form, use another
Visual Basic form and call SetSysModalWindow for this second form
also, so that it becomes the system modal window. When the second form
is unloaded, the original system modal form will again become the
system modal window. Note that because the window(s) shown from a
system modal window must also call SetSysModalWindow, and since
MsgBox/InputBox windows cannot have associated code, you should not
call the MsgBox or InputBox functions from a system modal window.
Reference(s):
"Programming Windows: the Microsoft Guide to Writing Applications for
Windows 3," by Charles Petzold, Microsoft Press, 1990
"Microsoft Windows 3.0 Software Development Kit: Reference Volume 1"
WINSDK.HLP file shipped with Microsoft Windows 3.0 Software
Development Kit