How To Create a System-Modal Program/Window in Visual Basic (147817)
The information in this article applies to:
- Microsoft Visual Basic Professional Edition, 16-bit, for Windows 4.0
- Microsoft Visual Basic Enterprise Edition, 16-bit, for Windows 4.0
This article was previously published under Q147817 SUMMARY
From a Microsoft Visual Basic for Windows program under Windows 95, Windows
98, or Windows 3.x, you can disable the ability to switch to other Windows
programs by calling the Windows API function SetSysModalWindow. The method
outlined below will not work with Windows NT.
NOTE: An equivalent Win32 API function for SetSysModalWindow does not
exist. System modal windows contradict the concept of multitasking and thus
are not implemented in Win32.
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 for Windows 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 for Windows 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 for
Windows 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.
Modification Type: | Minor | Last Reviewed: | 6/29/2004 |
---|
Keywords: | kb16bitonly kbhowto KB147817 |
---|
|