TITLE:Screen Savers in MultiValue Environment Part 2
ISSUE:Multi-Value Solutions Nov'98
AUTHOR:Nathan Rector
COMPANY:Natec Systems
EMAIL:nater@northcoast.com
HTTP:www.northcoast.com/~nater/
Last month I started the topic of using a screen saver to help secure a Windows workstation using MultiValue information. With the merging of the MutliValue world into the Windows world, the IS department has lost the once secured and control workstations they had with dumb terminals.
With more and more people learning Windows, there is increasing workstation abuse from both new programs the user has added or changes to the existing system. The once secure accounting computers have become less secure as MutliValue information is finding it's way into spreadsheets that are not saved in the MultiValue Database. Anyone familiar with Windows may be able to get access to these files if the user walks away or just by booting the computer up when accounting personel are not around.
There are many security features built into Windows. Although screen savers are not generally thought of as one, but all screen savers have the option for a password.
The one problem with this password is that it exists on the local machine and is a generic overall password that is easily pass around to other coworkers. It also doesn't allow the you the ability to control the time of the day and the says of the week the user may use the system.
Now imagine having a screen saver that will validate a user name and password against information on the host system. In this article I'm going to show you how to make one. This program will require a little bit of knowledge of Visual Basic as well as Visual Basic hooks into the MutliValue database, eg: Winlink32, Pic-Lan, D3 Objects, or UniObjects.
Last month I covered the core code of the screen saver. This month I'll talk about visual aspect of the screen saver and the user interface.
I'll start with the Login dialog box that is displayed when the user touch a key or moves the mouse. This example uses a form called frmLogin that looks like the following:
{show picture of login box}
Here is what the controls do:
txtUserName and txtPassword are obvious. They ask the user for the login information.
Status shows the status of the users login.
cmdOk and cmdCancel are your Windows defaults for what to do.
Timer1 is the one control that isn't really clear what it does. The Timer control is used to cause the dialog box to close if nothing has happened after a period of time.
There are a few internal variables and routines that is needed in the form. The method CheckLogin is used to do the actual valiation of the user name and password on the MultiValue Host.
The variable LoginSucceeded is used by the main screen saver routines to see if the user name and password were valid and if the screen saver should continue to run or if it should shut down.
The following code is what is found behind the actual Login Dialog form. Please note that his screen saver was originally designed to work with Pic-Lan. By changing the code in CheckLogin, you can cause the Login Dialog to pull information from anywhere you wish.
Option Explicit
Dim PicLan As New Plan
Public LoginSucceeded As Boolean
Public ErrMsg As String
Private Sub cmdCancel_Click()
'set the global var to false
'to denote a failed login
LoginSucceeded = False
Me.Hide
End Sub
Private Sub cmdOK_Click()
'check for correct password
If txtPassword = "pic-lan screensaver" Then
'place code to here to pass the
'success to the calling sub
'setting a global var is the easiest
LoginSucceeded = True
Me.Hide
ElseIf CheckLogin Then
LoginSucceeded = True
Me.Hide
Else
Beep
frmLogin.Height = 2505
Status = "Invalid Password, try again!" & vbCrLf & ErrMsg
txtPassword.SetFocus
SendKeys "{Home}+{End}"
End If
End Sub
Private Sub Form_Load()
LoginSucceeded = False
frmLogin.Height = 1635
End Sub
Private Sub Timer1_Timer()
LoginSucceeded = False
frmLogin.Height = 1635
Me.Hide
End Sub
Public Function CheckLogin() As Boolean
Dim EmpFile As Integer
Dim ErrNo As Integer
Dim EmpItem As String
Dim EmpPassword As String
' this routine is used to check to make sure that the
' person logining in is a valid user
CheckLogin = False
On Error GoTo ErrorHandler
' Opens the employee file
EmpFile = PicLan.FileOpen("APMAIN", "TCR", "EMP")
If EmpFile <= 0 Then
' error
ErrMsg = PicLan.ErrorStr(EmpFile)
GoTo ExitSub
End If
' Checks to see if the employee exists. If not, then
' login error
ErrNo = PicLan.ItemRead(EmpFile, txtUserName, EmpItem)
If ErrNo = PLAN_NOT_ON_FILE Then
ErrMsg = "" 'txtUserName & " does not exist"
GoTo CloseFile
ElseIf ErrNo < 0 Then
' employee number does not exist
ErrMsg = PicLan.ErrorStr(EmpFile)
GoTo CloseFile
End If
' checks password
EmpPassword = PicLan.DynExtract(EmpItem, 49, 1, 1)
If EmpPassword = txtPassword Then
' ok Passwords match
ErrMsg = "" '"Password does not match"
CheckLogin = True
Else
' error. Password wrong
End If
CloseFile:
' close file
ErrNo = PicLan.FileClose(EmpFile)
If ErrNo <= 0 Then
' error
End If
ExitSub:
' terminates
Set PicLan = Nothing
Exit Function
ErrorHandler:
ErrMsg = Err.Description
Exit Function
End Function