Screensaver, programmez votre economiseur d'écran....

Description

Voici un projet complet illustrant comment programmer un economiseur d'ecran.
L'economiseur d'ecran affiche les images contenues dans un repertoir.
Il affiche une previsualisation dans le petit écran de la fenêtre de configuration.
Il disable la souris et le ctrl+alt+sup.
Il prend en compte le mot de passe commun a tout les economiseurs d'ecran
present sur un PC.

Il faut pour cela faire appel à plusieurs API qui sont declarées dans le module
"mScreenSaver.bas".

Un economiseur d'ecran est un executable *.exe dont l'extension est changée en *.src
qui doit être copier dans le repertoire "C:/windows/systeme/".
La particularité de ce programme est qu'il doit doit savoir interpreter les lignes de
commande que windows lui envoi. Le principal probléme est que windows n'envoie pas qu'
un appel à l'economiseur d'ecran pour le demarrer, il en envoie des dizaines (?). Il faut
donc faire en sorte de fermer les nouvelles occurences du prog si il y en a deja une
qui tourne. Ce probléme peux être resolu avec la fonction "App.PrevInstance" mais si on
veux utiliser la previsualisation il faut laisser deux occurence tourner en même temps,
on utilisera donc les API.

Les commandes que windows envoie sont:
/s Start, demarrer l'economiseur
/c Configurer (quand on clique sur le bouton config dans propriétés d'affichage)
/p Preview afficher la preview dans le petit écran
/a changer le mot de passe

voici la fonction Main présente dans "mScreenSaver.bas", qui va analyser la ligne de commande.

Source / Exemple :


Sub Main()
Dim lresult As Long

 'Recuperer les paramétres dans la base de registre
 PathImage = GetSetting("ImgScreenSaver", "config", "PathImage", "c:\")
 DelayTimer = GetSetting("ImgScreenSaver", "config", "DelayTimer", 3000)

 'Check command line parameters
 Select Case LCase$(Left$(Trim$(Command$()), 2))
  Case "/s", "-s", "s"
    'Start Screen Saver / demarrer l'economiseur d'écran
    
    Mode = "MyScreenSaver"
    lresult = FindWindow("ThunderRT6FormDC", Mode)
    If lresult = 0 Then
         'evite de laisser window ouvrir plusieurs occurence du screenSaver mais sans 
	 'prendre compter le mode="preview" comme occurence
         frmScreenSaver.Show vbModal
    End If

  Case "/c", "-c", "c"
    'Show Configuration Dialog Box / ouvrir la fenêtre de config
    frmConfig.Show
   
  Case "/p", "-p", "p"
    'Start Preview in Control Panel /  Demarrer la preview dans le paneau de config d'affichage
    Dim lhwndPreview As Long
    Dim lWindowStyle As Long
    Mode = "Preview"
    Load frmScreenSaver
    
    'recup la "handle" de la preview dans la ligne de commande
    lhwndPreview = Val(Right$(Left$(Trim$(Command$()), 7), 4))
    lWindowStyle = GetWindowLong(frmScreenSaver.hWnd, GWL_STYLE)
    lresult = SetWindowLong(frmScreenSaver.hWnd, GWL_STYLE, lWindowStyle Or WS_CHILD)
    
    If lresult <> 0 Then
         'assigner cette handle comme parent du screensaver
         lresult = SetParent(frmScreenSaver.hWnd, lhwndPreview)
         If lresult <> 0 Then
             frmScreenSaver.Show vbModal
         Else
             Unload frmScreenSaver
         End If
    Else
         Unload frmScreenSaver
    End If
   
  Case "/a", "-a", "a"
    'Change Screen Saver Password / changer le mot de pass
    Call ChangePassword

  Case Else
    'Show Configuration Dialog Box
    frmConfig.Show
 End Select

End Sub

Conclusion :


Pour le reste il y a deux form:
frmScreenSaver c'est la form qui est affichée à l'ecran (on peut y faire ce qu'on veux)
frmConfig comme son nom l'indique la config

Les deux autres modules présents sont utiles pour mon economiseur d'ecran mais ne sont
pas utiles si vous changer ce que fait le program.

Njoy
Bortoclimb

PS: pour le debugage ne pas oublier de mettre en remarque la desactivation de la souris et
du ctrl+alt+sup :)

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.