Microsoft KB Archive/106239

From BetaArchive Wiki

Article ID: 106239

Article Last Modified on 1/8/2003


  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic 4.0 16-bit Enterprise Edition
  • Microsoft Visual Basic 2.0 Professional Edition
  • Microsoft Visual Basic 3.0 Professional Edition

This article was previously published under Q106239


You can create a Windows screen saver with Visual Basic by following the guidelines listed below. However, please note that this article gives only a very rough outline of what you should do for a robust screen saver. These are general guidelines only.


Follow these guidelines when creating a Windows screen saver with Visual Basic:

  • In the File Make EXE File dialog, insert the string SCRNSAVE: (in upper case) at the beginning of the Application Title. For example:

    SCRNSAVE:Flying Fish.
  • In the File Make EXE File dialog, specify the program file name extension as .SCR instead of .EXE.
  • Locate the .SCR program file in the \WINDOWS directory.
  • Give your form the following property settings so that it occupies the entire screen and does not have a title bar:

          Caption     = ""     (no caption)
          ControlBox  = False
          MaxButton   = False
          MinButton   = False
          WindowState = 2      (maximized)
  • Place code in all MouseMove, MouseDown, and KeyDown event handlers that exit the program. Because Visual Basic may invoke the MouseMove event when the form is first loaded, you must write code to ignore the first MouseMove event. The following MouseMove code avoids an artifact event that occurs when the application is first activated or when the application is running and another instance starts (causing loss of focus) and then quits (restoring focus):

       ' VB3Line: Enter the following two lines as one, single line of code:
       Sub Form_MouseMove (Button As Integer, Shift As Integer, _
          X As Single, Y As Single)
          Static count As Integer
          If count > 2 Then
             count = count + 1
          End If
       End Sub

    This gives you a bit of slack when it comes to artifact MouseMove events. You'll want to do something similar with the MouseDown and KeyDown events.

Preventing Multiple Launches

Windows usually launches the screen saver program multiple times. To prevent more than one copy of your screen saver from running, add the following statements to the Form_Load event handler, or Sub Main if used.

Sub Form_Load ()
   If App.PrevInstance Then
   End If
End Sub

There is no reason to attempt to restore the previous instance of the screen saver as the active window because it will become the active window when the new instance ends. All you have to do is terminate when you see another instance running.

To prevent multiple instances of the application from running as well as to keep the application running, you should move the code from the Form_Load() to a Sub Main(). Then set the project's Startup Form Option to Sub Main().

Sub Main ()
   If App.PrevInstance Then   ' If already running, end the application.
      Form1.Show 1             ' Show the screen saver form.
   End If
End Sub

Launching the Screen Saver

Windows takes care of launching the Screen Saver. It keeps track of system idle time and launches the screen saver program. You can use a timer control to periodically draw graphics on the form.

Screen savers are selected and configured from Windows Control Panel in the Desktop dialog. The screen saver section of this dialog has a button labeled Setup that invokes the screen saver program with the command line option /c. When your program is invoked with this option, you can display a configuration form to allow the user to select settings such as speed, number of objects, colors, and so on. Detect the /c command line parameter by checking the Command$ function. For example:

Sub Form_Load ()
   If Command$ = "/c" Then
      frmConfig.Show   ' display configuration form
      Unload Me        ' bypass regular form
   End If
End Sub

When Windows launches the screen saver, it usually specifies the command line option /s.

Possible Improvements

You may also want your program to appear on top of all other windows by making it a TOPMOST window.

For additional information, please see the following article(s) in the Microsoft Knowledge Base:

84251 : How to Create a Topmost or Floating Window in Visual Basic

Also, you can find two example programs and a complete explanation showing how to write your own screen savers in Visual Basic in the following book:

"Visual Basic Workshop 3.0" by John C. Craig, published by Microsoft Press.

This article is a rough outline of what you should do for a robust screen saver. For example, you might want to have the startup be a Sub Main() in which you check for a previous instance and End if there is one. This would avoid the form load totally if there were already an instance running. It might also avoid the artifact MouseMove problem.

Additional query words: 2.00 3.00 4.00 vb416

Keywords: kbcode KB106239