virtual screen saver
TRANSCRIPT
-
8/2/2019 Virtual Screen Saver
1/15
VIRTUAL SCREEN-
SAVER SYSTEM
Group Members:M.Saad Siddiqui (s110.06)
Syed Mohammed Ali (s062.06)Saim Pasha (s.06)
-
8/2/2019 Virtual Screen Saver
2/15
ApplicationDesign
-
8/2/2019 Virtual Screen Saver
3/15
Introduction:
The Virtual Screensaver System is a windows based program designed purely on Winasm
Studio.
The primary design of the Screensaver was based on Windows Application Programming
Interface (Windows API) which is Microsofts core Application Programming Interface.
The basic idea which was implemented was to construct a program that when installed,
would, after a basic pc-idle time (no keyboard or mouse movement), would begin to
display images on the screen until any pc- activity is done. Any keyboard or mousemovement would then turn off the images being displayed, restoring the previous view of
the computer, But the program would still be resident in memory, waiting to be executed
again when a certain pc-idle time is reached. It will keep on doing this till it is uninstalled
from memory.
Winasm and Winapi were used because they easily facilitated the use of loading/unloading
graphics and bitmaps and gave easy access to functions like dialog boxes, windows, splashscreens etc which greatly helped us in completing our program.
Initial Stage:
Firstly we started to design our project using 32-bit programming but realized that it did
not have interrupts. Interrupts were vital to our program so we switched to 16-bitprogramming. We were successful in making a skeleton program, but it was becoming very
difficult to debug and make it operational so in the end we decided to use 32-bit Windows
Programming using the Winasm studio.
We found out that Windows Programming gave us a lot of freedom in implementing our
ideas and functions. With its API services and help tutorials, we were sure this would work
for our screensaver.
Intermediate Stage:
After deciding the programming medium, we started studying windows programming
using assembly language. How the functions were called and how they worked. How API
calls were used how they client applications to invoke specific operations at runtime to
perform different tasks.
We were also introduced to the functions and uses of dynamically linked libraries(DLL)
files and how important they were to the function of a basic program.
The syntax of windows-based programming was very tough to get accustomed to. We got
extensive help from the tutorials present within the Winasm Studio package and they canalso be viewed at www.win32assembly.online.fr
http://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.fr -
8/2/2019 Virtual Screen Saver
4/15
We started off with designing the basic startup screen a person would see once he runs our
Program. This would enable him to either exit the program, or press continue to installthe program into memory.
This was done by creating a dialog box. A bitmap image was uploaded on the startupscreen and 2 buttons were added which provided the basic function. The following
procedure was used for that purpose.
invoke CreateDialogParam,hInstance,ADDR DlgName,NULL,NULL,NULL
The buttons were added using the resource editor of Winasm Studio.
A picture of most Modern Assembler - WinAsm
Next we designed the tray icon. System tray is the rectangular region in the taskbar whereseveral icons reside. Normally, you'll see at least a digital clock in it. This was programmedso that once the User presses the continue button, the startup screen would vanish and the
program would reside itself in the tray icon displaying the image of an application icon.
By this way the user can easily close the program via the popup menu which appears on theright mouse click over that icon. Or another way being that the user can double click on the
icon to restore the startup screen and then exit the program. This task was done doing the
following:
http://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.fr -
8/2/2019 Virtual Screen Saver
5/15
NOTIFYICONDATA was defined which has the following members:
o cbSize The size of this structure.
o hwnd Handle of the window that will receive notification when a mouse
event occurs over the tray icon.
o uID A constant that is used as the icon's identifier. You are the one
who decides on this value. In case you have more than one tray icons, youwill be able to check from what tray icon the mouse notification is from.
o uFlags Specify which members of this structure are valid
NIF_ICON The hIcon member is valid.
NIF_MESSAGE The uCallbackMessage member is valid.
NIF_TIP The szTip member is valid.
o uCallbackMessage The custom message that Windows will send to the
window specified by the hwnd member when mouse events occur over the
tray icon. You create this message yourself.
o hIcon The handle of the icon you want to put into the system tray
o szTip A 64-byte array that contains the string that will be used as the
tooltip text when the mouse hovers over the tray icon.
o Shell_NotifyIcon was called which is defined in shell32.inc. This function
has the following prototype:
Shell_NotifyIcon PROTO dwMessage:DWORD ,pnid:DWORD
dwMessage is the type of message to send to the shell.
NIM_ADD adds an icon to the status area.
NIM_DELETE deletes an icon from the status area.NIM_MODIFY modifies an icon in the status area.
pnid is the pointer to a NOTIFYICONDATA structure filled with proper values.
While defining the functions of the tray icon a problem was faced that the program would
minimize itself to the tray but wont restore itself in a popup fashion. After intensivedebugging the problem still could not be solved so help was taken from the tutorial files
which showed that we had missed some code lines which when added made the tray icon
function work perfectly.
We then proceeded to create a splash screen that would act as the actual screensaver. Asplash screen is a window that has no title bar, no system menu box, no border that displays
a bitmap for a while and then disappears automatically. We modified the splash screen so
that it would keep on displaying till either a keypress or a mouse movement/press relatedactivity was done.
http://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.fr -
8/2/2019 Virtual Screen Saver
6/15
SPLASH SCREEN SAMPLE
The first step was to include the bitmap in the resource file. A *resource* DLL whichcontains the bitmap and has the sole purpose of displaying the splash screen was created as
it was considered an efficient practice. This way, a DLL would be loaded when we want to
display the splash screen and unload it when it's not necessary anymore. So we will have
two modules: the main program and the splash DLL. We will put the bitmap into the DLL'sresource.
The general scheme was as follows:
1. Put the bitmap into the DLL as a bitmap resource2. The main program calls LoadLibrary to load the dll into memory
3. The DLL entrypoint function of the DLL is called.
4. When the specified action ie keypress or mouse movement occurred the splash
screen would vanish.
http://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.fr -
8/2/2019 Virtual Screen Saver
7/15
We then started to work on a basic timer. The Function of the timer being that after the
continue button was pressed, a timer would start which would run till a particular length,
(which can be user defined) and after that if there has been no pc activity, the screensaverwould be seen on the monitor screen. If after the continue button was pressed, there was
some pc related activity, then the timer would be reset and it will again start as soon as the
pc becomes idle.
For this task we made use of various functions for detecting keyboard and mouse activitylike:
WM_MOUSEMOVE
WM_NCMOUSEMOVEWM_MOUSEWHEEL
WM_KEYDOWN
WM_SYSKEYDOWN
We faced several problems while programming this as we had trouble in defining an eventwhich would keep on activating the timer, as pressing the continue button was just going
to be done once. We tried various methods like using notification messages(UMsg) which
we got by applying WM_ACTIVE or WM_NCACTIVE etc to get some event which
would constant for the timer to run.
Final Stage: (Debugging mode)
We then moved on to adding .gif library to the program. We tried to do this because
BITMAPS are static images whereas .GIF could be animated and would serve better the
purpose of the Screensaver (reference to Phosphorus Burn) as moving images are
required.
For this we located the .gif libraries and include files and studied various tutorials which
gave information on adding .gif images to programs. We made attempts at adding these
codes to our program and were successful in compiling and linking our program but forsome reason the code wasnt functioning properly, and because there was no error in the
compilation, we were unable to locate the error.
However there was one constant issue we faced that the screensaver was not vanishing
when the mouse was moved. It was working perfectly with keypress and mouse buttonclicks and even the scroll wheel button. We tried nearly all mouse related functions in the
Winasm Library like:
WM_MOUSEMOVEWM_NCMOUSEMOVE
WM_GETMOUSE
WM_MOVE
WM_MOUSEACTIVATEWM_MOUSEHOVER and others also.
http://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.fr -
8/2/2019 Virtual Screen Saver
8/15
Till the end of the program development we could not design a solution to this issue as we
were unable to get mouse movements outside our design window, and our design window
was only resting in the tray icon. So this is one limitation of our program.
http://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.fr -
8/2/2019 Virtual Screen Saver
9/15
User Guide
http://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.fr -
8/2/2019 Virtual Screen Saver
10/15
This is a user guide which will enable you to use our Virtual Screensaver System:
1. Copy the program .exe file from USB or CD-ROM to desktop or any otherlocation.
2. Double Click the .exe file to install the program.
3. You will be greeted with a dialog box which would ask you would you like to
continue. Press Continue to install the screensaver in memory. Press exit to
close program.
4. After pressing continue you will see the dialog box will vanish and an icon will
appear in the system tray (where the clock is). This is the Screensaver program
running in the background.
5. Now whenever the pc is idle the screensaver will activate itself and deactivate
when there is any activity. Upon deactivation it will still remain in the memory andthe icon will be present in the system tray.
6. If you wish to exit our screensaver you can click the right-mouse button on the trayicon and press exit, OR you can double click on the tray icon, you will again see
the dialog box, and press exit there.
Thank you for Using Our Virtual Screensaver System.
http://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.fr -
8/2/2019 Virtual Screen Saver
11/15
WorkDistribution
http://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.fr -
8/2/2019 Virtual Screen Saver
12/15
M.Saad SiddiquiAPI functions & Their Usage Research
Dialog-box Creation
Splash Screen Creation
Tray Icon Creation
Worked on 16-bit program
Syed M.AliAPI functions & Their Usage Research
TSR Research
Timer Handling
Events Handling
Worked on 16-bit program
Saim PashaAPI functions & Their Usage Research
GIF & JPG File Format Research
Resourse Files Handling
DLL File Handling
http://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.fr -
8/2/2019 Virtual Screen Saver
13/15
SCREENSHOTS
http://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.frhttp://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.fr -
8/2/2019 Virtual Screen Saver
14/15
The Main Dialog Box
http://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.fr -
8/2/2019 Virtual Screen Saver
15/15
The Screen-Saver the appears
http://var/www/apps/conversion/current/tmp/scratch3014/www.win32assembly.online.fr