Id. de artículo: 550725 - Última revisión: lunes, 15 de septiembre de 1997 - Versión: 1.0

Cómo crear un salvapantallas en Visual Basic

Este artículo se publicó anteriormente con el número E10675
Expandir todo | Contraer todo

Resumen



Este artículo nos muestra un ejemplo de cómo crear un salvapantallas
en Visual Basic 5.0. Debemos tener en cuenta ciertas particularidades
relativas a seguridad cuando ejecutamos el salvapantallas en
diferentes entornos, Windows 95 ó Windows NT.

Más información



Una pregunta común es, ¿dónde residen los salvapantallas en Windows 95
y Windows NT?. Son ficheros con extensión SCR los cuales residen en
Windows\System en el caso de Windows 95 ó en Windows\System32 en el
caso de Windows NT.

¿Cómo podemos generar entonces un salvapantallas con Visual Basic?

Simplemente creando un ejecutable en Visual Basic y cuando Visual
Basic nos pregunte por la ubicación del ejecutable, asegurarnos de
poner al nombre del fichero ejecutable la extensión SCR.

Relativo al establecimiento de la contraseña, la principal diferencia
a nivel de salvapantallas entre Windows 95 y Windows NT, es que en
este último cuando se establece una contraseña para el salvapantallas
ésta no se solicita al usuario, ya que no se necesita , debido a que
el comportamiento por defecto cuando un salvapantallas tiene
establecida contraseña es bloquear la estación de trabajo. Como
consecuencia, en el código que se entrega a continuación, existe una
parte del código que nunca se ejecutara sobre Windows NT.

Como se aprecia en el código, existe una estructura, la cual es
interesante comentar.

Select Case UCase$(Left$(Command$, 2))
Case "/P"
Esta parte del código se ejecuta cuando se pulsa el botón
vista preliminar desde la ventana de propiedades del
salvapantallas.

Case "/C"
Esta parte del código se ejecuta al pulsar Configuración de
la ventana de propiedades del Salvapantallas.

Case "/A"
Esta parte del código se ejecuta al modificar la contraseña.
Sólo válida en Windows 95.

Case "/S"
Esta parte del código se ejecuta cuando el salvapantallas
se activa debido a que el tiempo establecido ha expirado.

Case Else

End Select

En dicha estructura se hace uso de la variable Command$, esta variable
nos devuelve los parámetros con los que se haya llamado al programa.

Cuando establecemos un salvapantallas en las propiedades del
escritorio, tenemos varias opciones, establecer contraseña,
configuracion del salvapantallas, etc. Cada una de estas opciones
se implementa con una llamada al programa, pero con un argumento
diferente en la línea de comandos, como se ha descrito anteriormente.

En este ejemplo no se han implementado cuestiones de seguridad ni
de configuración del salvapantallas. Para implementar seguridad,
bastaría añadir un formulario o varios que controlasen la introducción
y establecimiento de la contraseña, así como su verificación cuando se
quiera desactivar el salvapantallas. La contraseña la podemos guardar
en el registry de manera cifrada con alguno de los diferentes
algoritmos que existen.

En el tema de la configuración del salvapantallas para establecer
diferentes aspectos gráficos, seria adecuado que esa información se
recogiese y almacenase en el registry.

A continuación, se reproduce un ejemplo para poder crear un
salvapantallas con Visual Basic 5.0.


Option Explicit


'Declare API para ocultar el puntero del raton.
Private Declare Function ShowCursor Lib "user32" ( _
ByVal bShow As Long ) As Long

'Definir una estructura de datos para la funcion Polygon
Private Type POINTAPI
x As Long
Y As Long
End Type

'declaración de poligon para dibujar estrellas.
Private Declare Function Polygon Lib "gdi32" _
( ByVal hdc As Long, lpPoint As POINTAPI, _
ByVal nCount As Long ) As Long

'declaracion de variableas a nivel módulo.
Dim QuitFlag As Boolean

Private Sub Form_Click()
QuitFlag = True
End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
'Terminar si alguna tecla es pulsada.
QuitFlag = True
End Sub

Private Sub Form_Load()
Dim i As Integer, j As Integer
Dim x As Long
Dim nPoints As Long
Dim xCenter As Long, yCenter As Long
Dim radio As Single, angulo As Single

'No cargar multiples instancias
If App.PrevInstance = True Then
Unload Me
Exit Sub
End If

'Ocultar cursor del ratón
x = ShowCursor(False)
'Seguir según línea de comandos
Select Case UCase$(Left$(Command$, 2))

'Mostrar Propiedades en Vista Preliminar
Case "/P"
Unload Me
Exit Sub
'Al pulsar el botón de configuración
Case "/C"
x = ShowCursor(True)
SS3Setup.Show vbModal
x = ShowCursor(False)
Unload Me
Exit Sub

'Establecimiento de la password, esta porción de código no se
'ejecutará en Windows NT, por lo antes comentado
Case "/A"
x = ShowCursor(True)
MsgBox "Contraseña no está activa para este salvapantallas"
x = ShowCursor(False)
Unload Me
Exit Sub
Case "/S"
Show
Randomize
'Establecemos el numero de puntos.
nPoints = Val(GetSetting(Aapp.exename, "Startup", "Points", _
"5"))
ReDim P(nPoints) As POINTAPI
Scale (0, 0)-(1, 1)
BackColor = vbBlack
ScaleMode = vbPixels
FillStyle = vbSolid
'Loop para crear gráficos
Do
Radius = (1 + Rnd) * ScaleWidth / 20
xCenter = Rnd * ScaleWidth
yCenter = Rnd * ScaleHeight

For i = 0 To nPoints - 1
j = (j + nPoints \ 2) Mod nPoints
Angle = j * 6.2831853 / nPoints
P(i).x = xCenter + Radius * Cos(Angle)
P(i).Y = yCenter + Radius * Sin(Angle)
Next i

FillColor = RGB(Rnd * 256, Rnd * 256, Rnd * 256)

x = Polygon(hdc, P(0), UBound(P))

DoEvents
Loop Until QuitFlag = True

tmrexitnotify.Enabled = True
Case Else
Unload Me
Exit Sub
End Select
End Sub

Private Sub Form_MouseMove( _
Button As Integer, _
Shift As Integer, _
x As Single, _
Y As Single _
)
Static Xlast, Ylast
Dim Xnow As Single
Dim Ynow As Single
'Obtener la posición actual
Xnow = x
Ynow = Y
'En el primer movimiento, sólo grabar posición
If Xlast = 0 And Ylast = 0 Then
Xlast = Xnow
Ylast = Ynow
Exit Sub
End If
'Salir solamente si el ratón cambia su posición
If Xnow <> Xlast Or Ynow <> Ylast Then
QuitFlag = True
End If
End Sub

Private Sub tmrExitNotify_Timer()
Unload Me
End Sub

Private Sub Form_Unload(Cancel As Integer)
Dim x
'Show mouse pointer
x = ShowCursor(True)
End Sub

La información de este artículo se refiere a:
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Control Creation Edition
  • Microsoft Visual Basic 5.0 Learning Edition
Palabras clave: 
how screensaver to KB550725