Copyright: Copyright © 1994, Allen Jackson


Screen Saver Enhancer

Screen Saver Enhancer 2.5

SSE is an add-in to Microsoft Windows 3.1 or higher that gives additional functionality to Windows screen savers.  The primary function of SSE is to force the screen to blank using the current screen saver whenever the user desires.  In addition, SSE replaces the Windows Control Panel applet for operations on screen savers.

Choose a topic below for more information.

About SSE

SSE Control Panel

SSE Options

System Menu

Installing SSE

Removing SSE

About Screen Savers

Registration

SSE Invoice


Notes about SSE
About SSE

SSE was developed because I wanted the ability to use the huge number of Windows screen savers in the same way commercial screen saver add-ons are used.

For more information about specific aspects of SSE, choose a topic below:

Registration

Enhancements

Development Information

Contacting the Author

Disclaimer


SSE Control Panel

The SSE Control Panel can be opened by double-clicking on the SSE icon or choosing Control Panel... from the SSE system menu.  The SSE Control Panel is so named because it replaces the Windows Control Panel Desktop applet with quite a bit of enhancement.    Note:  the sleep corner is disabled until all SSE dialogs are closed.

Current Screen Saver

This is a drop down list containing all of the available screen savers on your system.  The current screen saver is shown in the edit window.

Test

This will start the current screen saver for your edification and enjoyment.

Setup...

This opens the configuration dialog for the current screen saver.

Screen Saver Delay (in seconds)

The Screen Saver Delay differs from the Control Panel in that it allows specification of seconds rather than minutes (try setting it to one second and see how long you can work without taking a one second break).

Screen Saver State

Three states are possible for the screen saver function of Windows:

On

Off until Windows restarts

Disabled

If Off or Disabled is checked, Windows will never save the screen due to expiration of the delay time.  The only way to blank the screen with this option turned on is explicitly with the SSE sleep corner or Sleep Now! menu option.  Disabled saves the "off" state across Windows sessions.


SSE Options

Choosing Options... from the SSE Control Panel opens the SSE Options dialog.

Sleep Corner

The sleep corner is the magic switch that starts the screen saver.  Just rest in the sleep corner for at least a second, and the screen saver will start.  SSE must be minimized for the sleep corner to be active; if any of the SSE dialogs are open, the sleep corner is disabled.  The one second delay is to reduce accidental blanking.  The default sleep corner is the lower left.  Upon restoring the screen, if the mouse is still in the sleep corner, SSE will not save the screen until the mouse is moved away from, and back to, the sleep corner.

Notice that even when MS-DOS is the top-most application, that the sleep corner works!  Windows 3.1 refuses to blank MS-DOS sessions by delay; it must be done explicitly.

Sleep Never Corner

Positioning the cursor in the sleep never corner disables the screen save delay feature.  The cursor will change to an exclamation point when it is in the sleep never corner (SSE does not change the cursor under Windows 95).  As long as the cursor remains in the sleep never corner, Windows will not blank the screen.

Hide the SSE icon on startup

The most requested feature for SSE 1.x was "hide the icon!", so as of SSE 2.0 you can hide the icon!  It can be hidden on startup, or at any time from the SSE system menu.  When SSE is hidden, it's really hidden.  It will not appear in the task list or in the Alt-Tab sequence.  To unhide SSE, just run it again.

To determine if SSE is running at any time, move the mouse pointer to the sleep never corner and the cursor will change to an exclamation mark to indicate that SSE is active.

Blank the screen immediately on startup

Checking this option causes SSE to blank the screen immediately upon executing the first instance of SSE.  This is to enhance the ability of screen savers with passwords to secure your workstation.  Adding "/blank" to the SSE command-line will do the same thing.

Disable the splash screen (registered version)

Well, if you really want to, and you are a registered user, you can disable the splash screen.  If you do though, and you are hiding SSE on startup, you will have no indication that SSE loaded.  I don't know why anyone wouldn't want to see the splash screen as often as possible...


Splash Screen

The splash screen is your primary indication that SSE is being loaded.  If the SSE icon is being hidden on startup, it is the only indication.  The shareware version of SSE contains the phrase "UNREGISTERED SHAREWARE" in the splash screen.  Upon valid registration, this message is removed and you have the option to disable the splash screen completely.  In addition, the shareware delay for the splash screen is four seconds.  This is reduced to one second upon registration.  The splash screen is the only difference between the shareware version and the registered version.  The shareware version of SSE is fully functional.

Note that the splash screen does not affect the operation of Windows.  For instance, if the shareware version of SSE loads first in your Windows Startup group, it will not delay the loading of other software.  In fact, you can start any program whose icon is not covered by the splash screen at any time while it is on the screen.  Note, however, that because SSE runs in idle time, the splash screen may stay on the screen longer if it is loaded first, because it will not clear the splash screen while other software is loading or if you open an SSE dialog prior to the splash screen being removed.


System Menu

The system menu is presented when the SSE icon is single clicked.  Choose one of the following for more information:

SSE Control Panel

This option opens the SSE Control Panel.

Hide SSE

This option hides the SSE icon.  To have the icon reappear, you simply run SSE again.

Sleep Now!

This is an alternate way of starting the screen saver.  When Sleep Now! is chosen from the system menu, SSE starts the current screen saver immediately with no delay (unlike the sleep corner).


Installing SSE

SSE is eeaaasy to install.  Just put SSE.EXE and SSE.HLP anywhere you want and run it!  It does not touch your .INI files (although SSE creates its own SSE.INI once the options are set).  If you want SSE to start with Windows, drop it in your Start Up folder (or add it to the "run=" or "load=" lines in WIN.INI).

Adding "/blank" to the command-line causes SSE to blank the screen immediately upon executing the first instance of SSE.  See SSE Options for more information.


Removing SSE

Not that you will, but to remove SSE from your system, delete the following files:

SSE.EXE

SSE.HLP

SSE.INI (in your Windows directory)

If you do remove SSE, I'd love to know why.


Registration
SSE Registration

SSE is not free (version 1.0 and 1.1 were free, but registration was requested); SSE is shareware.  A lot of work has gone into SSE since version 1.0, and SSE is a valuable and unique Windows enhancement.  All registrations through SSE 3.0 are lifetime registrations, including all currently registered users.  See the SSE invoice for pricing details.

The use of SSE is subject to the following terms and conditions:

Unregistered users are granted a limited license to use SSE for up to 30 days for the purpose of determining whether it is suitable for their needs.  Continued use of SSE requires registration.  The use of unlicensed copies of SSE by any person, business, or government agency is strictly prohibited.

Upon registering, you will be provided with the registration code necessary to personalize your copy of SSE.  This eliminates the "UNREGISTERED SHAREWARE" notice on the splash screen and installs the registered name in the about box as evidence of registration.  Upon request, the author will send a registration confirmation notice to prove that the software has been legally registered.

To purchase SSE, choose Invoice, and then select File/Print Topic from the menu, or have your registration completed automatically via CompuServe shareware registration (GO SWREG; ID#3681).  The archive which contained this help file also contained SSE.EXE.   When you register you are purchasing the right to continue using SSE beyond the trial period.  The software has already been delivered.

Registration Dialog

Registration of SSE requires a name and registration code to be entered in the Registration Dialog.  The codes are unique and keyed to the licensee's exact registration name.  Upper and lower case is significant as well as punctuation and spaces.  For example, if SSE is registered to Joe Bleaux, Jr., It must be typed in as Joe Bleaux, Jr. without trailing or leading spaces.


SSE Invoice
Screen Saver Enhancer Invoice

Single-user registration is available via CompuServe (GO SWREG; ID# 3681).

NEW!!!  All registrations prior to SSE 3.0 are lifetime registrations!

Qty	Product	Price	Amount
____	Screen Saver Enhancer single-user license	$10.00	________
	Discounts: 2-4 licenses: $8.00 each 5-8 licenses: $6.00 each 8 or more licenses: $5.00 each
____	Screen Saver Enhancer network server license	$75.00	________
____	Screen Saver Enhancer unlimited license	$395.00	________
	Optional:
	Disk and Manual (includes a selection of shareware screen savers)
	- inside U.S.	$5.00	________
	- outside U.S.	$12.00	________
	Total: cash, check, or money order in U.S. Dollars		________

Please register SSE in the following name:

Registration Name:	_________________________________________________

Mailing Address:	_________________________________________________

_________________________________________________

_________________________________________________

Send my registration code via:	U.S. Mail	Phone

(circle and fill in the blank)	E-Mail	Fax	_______________________

Remit to:	Allen Jackson

2916 Wickford Dr.

Kennesaw, GA 30144

Purchase orders will be accepted from established businesses for a minimum of $75.00.


Possible Enhancements
Enhancements

Comments have been made for enhancements like single clicking the icon to activate sleep, ability to cycle screen savers, having an installation program, etc.  I'll address these and set the stage for the next revision of SSE.

Any sort of left-clicking on the icon to activate sleep is not practical.  Single-clicking on a Windows icon should (and does) cause the system menu to pop up.  Double-clicking causes the application window to be restored.  Although I tried various combinations, in the end, I was not willing to modify the "expected" behavior.  Right clicking is a possibility, but many of these rules change in Windows 95 anyway, so this is on hold.

There is a pretty good screen saver cycling program out there called CYCLE.SCR by Gordon Harris.  I think it can be found in the Windows Fun forum on CompuServe.  The only trouble I've had with it is that sometimes it will actually pull up more than one .SCR at the same time.  This is a likely addition for SSE.

The cursor will blink if you move it around near the don't sleep corner.  This is a behavior of Windows.  Windows resets the cursor every time the mouse changes position.  You usually don't see it because the shape doesn't change often within a screen region.  The only way to prevent the blinking is to disable the mouse when it's in the sleep never corner.  For instance, double click in the don't sleep corner with the desktop underneath.  The task list will pop up as it should; not so with SSE 1.1.  Note that Windows 95 treats the mouse differently, and the sleep never cursor will not display except in full screen Windows sessions.

There are no global hot keys to invoke sleep mode.  This requires a system hook into Windows which degrades performance.  Also, system hooks must reside in a DLL which would have added another file to SSE.  A hot key sounds like a good idea, but I have vetoed it for now.

As of SSE 2.5, I have replaced the Windows Control Panel options completely and superseded them within SSE including the chooser, test, setup, and delay.  I am planning for a supervisor mode that would disallow the use of certain screen savers based on password protection and other possible criteria.


Development Information

I have tested SSE in a variety of different settings and conditions.  I have tested it with dozens of .SCR modules and have found none to be incompatible with SSE.  In fact, to be incompatible with SSE, a screen saver would pretty much have to be completely incompatible with Windows.  Incidentally, I have found many .SCRs that do not conform well to the Windows screen saver specification, but these have their own set of problems.

There are a few other utilities that can force Windows to blank the screen similar to SSE.  They use a slew of different methods to accomplish their goal (some much worse than others).  SSE was built to be as unobtrusive as possible.  There are no DLLs required, no system hooks, and no excessive demands.  It runs mostly in idle time.

I have been diligent in making SSE as small and efficient as possible. I hope you find it to be as valuable an addition to your Windows tool kit as I have.

SSE was developed on a 486/50 running MS-DOS 6.0 and Windows 3.1.  It was created using Visual C++ 1.5 and MFC 2.0.  SSE was written entirely in C++ utilizing the Microsoft Foundation Classes whenever practical.  SSE was written to be upwardly compatible with Windows.  SSE does not utilize undocumented tricks or traps to accomplish its job, therefore, it is certain to run on all future versions of Windows.  SSE has been tested with Windows 3.1 and Windows 95.  It has not been tested with Windows NT, but should work flawlessly.  Please let me know if you are using SSE with NT.

Program History

Version 1.0

Initial release.

Version 1.1:

Made corner regions smaller.

Added sleep never corner.

Added one second delay on sleep activation.

Version 2.0:

Added Options, Hide SSE, and Sleep Now! to the system menu.

Changed the method for don't sleep control.

Cursor is no longer centered away from the sleep corner.  Sleep is activated a single time until the cursor is moved away from and back to the sleep corner.

Added the ability to hide SSE.

Added SSE options dialog.

Added registration dialog (SSE is no longer free).

Command-line processing for "/blank".

Added Help file.

Many other valuable changes that got lost in the shuffle...

Version 2.5:

Registation via CompuServe SWREG now available.

Moved SSE Options to a new dialog.

Changed the first level SSE dialog to the SSE Control Panel.

Added the Windows Screen Saver Specification to the help file.


Contacting the Author

SSE was developed by Allen Jackson.  Support is available for registered and unregistered users; I can be reached in decending order of preference as follows:

CompuServe:	72357,644

Internet:	72357.644@compuserve.com

Channel1:	(617) 354-8873
Once online: J MAILBOX

The current version of SSE can always be found in the following locations:

CompuServe	GO WINFUN (Windows Fun)
GO PBS:STUDIO (Public Brand Software)

Internet:	available by anonymous ftp from OAK.Oakland.Edu and its mirrors

Channel1:	(617) 354-8873


Disclaimer

This information should be implied, because everyone using shareware knows of the possible risks, but here it is anyway...

The author of Screen Saver Enhancer ("SSE") specifically disclaims all warranties, expressed or implied, including but not limited to implied warranties of merchantabilty and fitness for a particular purpose, with respect to the SSE software and associated supporting files.  The author shall have no liabilty with respect to any loss or damage directly or indirectly arising out of the use of SSE.  Without limiting the foregoing, the author shall not be liable for any loss of profit, interruption of business, damage to equipment or data, including but not limited to direct, indirect, special, incidental, or consequential damages.  The software remains the property of the author and may not be modified in any way.

In other words, SSE is not waranted to do anything useful at all, up to and including, nothing.  But, if by some chance you find that you want to use it anyway, you are doing so at your own risk

That ought to do it.


About Screen Savers

Screen savers were first introduced in Multimedia Windows which was an extension to Windows 3.0.  Somebody must have liked the idea, because screen savers were added to Microsoft Windows 3.1 and have been in every version since.

According to Microsoft, screen savers exist for two main reasons:

To avoid phosphor burn caused by static images on a screen

To conceal sensitive information left on a screen

The first reason is not such a problem nowadays.  Unfortunately, little was done to the screen saver mechanism in Windows to assist with the more important second reason.  SSE fills that void, and goes well beyond.

The Desktop applet in Windows Control Panel lets users select from a list of screen savers, specify how much time should elapse before the screen saver is started, configure screen savers, and preview screen savers.  The SSE Control Panel replaces that function!  Once a screen saver is chosen via the control panel, Windows monitors keystrokes and mouse movements, starting the screen saver after a period of inactivity. However, Windows does not start the screen saver if any of the following conditions exist:

The active application is not a Windows application (e.g. MS-DOS).

A computer-based training (CBT) window is present.

Windows notifies the active application that it is about to save the screen, but the application answers in such a way to prevent the screen saver from activating.

In Windows 3.1, SSE will circumvent these restrictions with the exception of an MS-DOS Full Screen session.  The solution is not to run DOS full screen; it works just as well as a window.  Without full screen DOS applications present, SSE can save the screen at any time.  Although Windows 3.1 does not blank the screen if MS-DOS is the active application, this is not the case with Windows 95 (formerly known as Chicago); Windows 95 will blank even a full screen DOS session.  SSE has been tested with Windows 95, and works very well.

Note that the use of a screen saver can degrade performance on a workstation that is sharing resources (e.g. running Windows for Workgroups). If you will be sharing resources on your computer specify a screen saver such as Marquee or Stars, which are not CPU intensive to provide the best resource sharing performance.

For more information see the Windows Screen Saver Specification.


Windows Screen Saver Specification

This specification was pulled together based on my experience with Windows sceen savers.  This is all in accordance with Microsoft's specifications.  I have provided it here in the sincere hope that screen saver authors pay attention!

Screen savers should contain specific variable declarations, exported functions, and resource definitions. The static-link library SCRNSAVE.LIB (included with the SDK) contains the WinMain function and other startup code required for a screen saver. To create a screen saver, you create a source module containing specific function and variable definitions and link it with SCRNSAVE.LIB. Working screen savers can also be created with Visual Basic, but they do not strictly meet all of the specifications outlined here.  Your screen saver module is responsible only for configuring itself and for providing visual effects.

When your screen saver starts, the startup code in SCRNSAVE.LIB creates a full-screen window. The window class for the screen saver window is declared as follows:

WNDCLASS cls;

cls.hCursor        = NULL;

cls.hIcon          = LoadIcon(hInst, MAKEINTATOM(ID_APP));

cls.lpszMenuName   = NULL;

cls.lpszClassName  = "WindowsScreenSaverClass";

cls.hbrBackground  = GetStockObject(BLACK_BRUSH);

cls.hInstance      = hInst;

cls.style          = CS_VREDRAW | CS_HREDRAW |

                     CS_SAVEBITS | CS_DBLCLKS;

cls.lpfnWndProc    = ScreenSaverProc;

cls.cbWndExtra     = 0;

cls.cbClsExtra     = 0;

Your source module provides the ScreenSaverProc window procedure. Your resource-definition file supplies the icon identified by ID_APP. This icon is visible only if your screen saver is run as an .EXE (to be run by Control Panel, a screen saver must have the .SCR filename extension) .

Your source should include SCRNSAVE.H which defines the function prototypes for the screen saver functions in SCRNSAVE.LIB.  You should also define the idsAppName string which contains the screen saver name in the form "Screen Saver.Name", where Name is a unique name for your screen saver. For example, a screen saver named "Turkey Shoot" would include the following line in the STRINGTABLE statement in its resource file:

STRINGTABLE PRELOAD

BEGIN

    idsAppName          "Screen Saver.Turkey Shoot"

    .

    .  /* other strings */

    .

END

If your screen saver stores configuration information, it should use the idsAppName string as the application heading for the configuration block in the CONTROL.INI file.  SCRNSAVE.LIB uses the application name stored in the idsAppName STRINGTABLE statement as the CONTROL.INI application heading. Your application can use the LoadString function to retrieve the name of the heading from CONTROL.INI and then use the WritePrivateProfileString and WritePrivateProfileInt functions to store the configuration information.

Your application should also declare the following global variables, which are defined in SCRNSAVE.LIB:

extern HANDLE hMainInstance;

extern HWND   hMainWindow;

The hMainInstance variable contains the instance handle of your application. The hMainWindow variable contains the window handle of the screen saver window.

Your screen saver module must include a ScreenSaverProc window procedure to receive and process messages for the screen saver window. The ScreenSaverProc window procedure must pass unprocessed messages to the DefScreenSaverProc function rather than to the DefWindowProc function.

Your ScreenSaverProc window procedure can substitute its own actions for the message handling performed by DefScreenSaverProc.  The ScreenSaverProc window procedure must be exported by including it in the EXPORTS section of your module-definition (.DEF) file.

And the most important part, the DESCRIPTION statement in your module-definition file must use the following format (this is not optional):

DESCRIPTION 'SCRNSAVE : description'

There is far more than this to even a simple screen saver.  It should get most folks pointed in the right direction.  Please find the Microsoft documentation related to screen savers for further information.

Incidentally, this most common violations of the specification occur in the following places:

Not using "WindowsScreenSaverClass" as the class name.

Not using the "SCRNSAVE : name" format properly.

Not using "Screen Saver.Name" for the CONTROL.INI file.

Not using "PWProtected=" for password protected screen savers.

Not using the [ScreenSaver] section of CONTROL.INI to store the password.

In future versions of SSE, I may list screen savers which meet these criteria, and appear to work well in general.  There is no other avenue of which I am aware for doing this.  In fact, with paid registration, I am including my favorite shareware screen savers on disk to those who are interested.

Bottom line -- a specification does exist, albeit rather loose.  At the very least, Microsoft has a number of examples that came with Windows 3.1.  Take a look at how those were done, look in the CONTROL.INI file, and use the headers and libraries that Microsoft provided.  They're there; you might as well take advantage of them!