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 BasicEste artículo se publicó anteriormente con el número E10675 ResumenEste 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ónUna 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 |
Volver al principio
