Page 1 sur 2

Ecran de veille

Publié : sam. 19/févr./2005 13:28
par comtois
J'ai commencé à lire ce site
http://nono40.developpez.com/tutoriel/d ... reensaver/

et il y a plusieurs points qui m'intriguent , jusqu'ici j'ai toujours vu sur ce forum que vous testiez uniquement les paramètres sous cette forme /p ou /s
apparemment , ils peuvent être aussi de la forme -s /s ou s .
c'est dans quel cas ? quelqu'un a déjà fait une gestion complète d'un écran de veille en prenant en compte ces caractéristiques ?

ensuite j'aimerais essayer de faire une prévisualisation , mais je n'y comprends rien .
Pour prévisualiser l'écran de veille Windows lance l'application en lui passant -P, /P ou P en premier paramètre.
Le second paramètre est le Handle de la fenêtre dans laquelle doit s'afficher l'écran de veille.

Attention, la prévisualisation est l'affichage dans le petit moniteur de la fenêtre des propriétés d'affichage du bureau. Le bouton "tester" de cette même fenêtre ne fait que lancer l'écran de veille normalement avec la commande S.
Si la fenêtre utilisée par la commande S est définie comme ci-dessus, alors il suffit d'assigner le ParentHandle de cette fenêtre avec la valeur reçue dans le deuxième paramètre.

Il ne faut pas gérer le mot de passe dans ce cas, ni la sortie par les mouvements de souris ou les évènement clavier. Windows se chargera de fermer l'écran de veille en envoyant un message WM_CLOSE à l'application. Rien ne doit donc empêcher sa fermeture en mode prévisualisation.
même question , quelqu'un a déjà réussi à faire une prévisualisation avec ce handle ?

ensuite plus loin
L'écran de veille, quand il est en mode normal, ( commande S ) doit signaler au système qu'il est en veille. Pour cela il faut utiliser la fonction SystemParametersInfo avec le paramètre SPI_SCREENSAVERRUNNING.

Au délà du fait que le système sait qu'il est en mode veille, ceci simplifie beaucoup la gestion des accès externes. En effet en mode veille Alt-TAB, Ctrl-ESC, etc sont désactivés. Il n'y donc plus aucune gestion à faire pour bloquer le basculement de tâche quand l'écran de veille est lancé.
pareil , quelqu'un a un exemple ?

Sinon , afficher la fenêtre de configuration , et l'écran de veille , ça va , j'ai réussi , c'était pas le plus dur :)

Je crois qu'un petit tut sur la réalisation d'un écran de veille serait le bienvenue :)

Publié : sam. 19/févr./2005 13:30
par Oliv
Je crois avoir déjà vu les "S" dans des réponses de Régis, mais c'était peut-être dans le musée

Publié : sam. 19/févr./2005 13:33
par comtois
ok merci ,.
tiens je n'avais pas encore été assez loin sur le site , il y a un code , je commence à le lire et j'ai vu qu'effectivement , il faut traiter les paramètres de la façon suivante

Code : Tout sélectionner

// On commence par prendre les paramètres passés au programme
  Param1 := Copy(UpperCase(ParamStr(1)),1,2);
  Param2 := UpperCase(ParamStr(2));

  // On filtre le premier afin de ne garder que la lettre
  If (Length(Param1)>0)And Not (Param1[1] In ['A'..'Z']) Then
    Param1 := Copy(Param1,2,1);

  // On détermine ce qu'il faut faire en fonction de Param1
  If Param1='P' Then ssMode := ssPrevisu;
  If Param1='C' Then ssMode := ssConfig;
  If Param1='S' Then ssMode := ssAffiche;
  If Param1='A' Then ssMode := ssMotDePasse;
ensuite il parle de mutex pour éviter d'avoir plusieurs instances , mais alors là , c'est pas pour moi ça :)

bon , je continue d'explorer l'exemple .

Publié : sam. 19/févr./2005 23:32
par comtois
J'ai trouvé un exemple pour la prévisualisation .
http://purebasicforums.com/english/viewtopic.php?t=8891

Reste à trouver comment faire en sorte qu'il n'y ait qu'une seule instance ?

Publié : dim. 20/févr./2005 8:05
par Anonyme2
Il me semble que Hardy avait fait un tuto sur les mutex

Publié : dim. 20/févr./2005 8:15
par comtois
ok merci je vais faire une petite recherche .

Sinon dans le lien que j'ai donné plus haut , Kale donne un exemple , je vais essayer de comprendre comment ça fonctionne avec le tut de Hardy :)

Code : Tout sélectionner

...
ScreensaverName = "PureBasic ScreenSaver v1.0"
...
;start only one screensaver
Procedure OnlyOneSCRStart(SaverName.s)
    *MutexName = @SaverName
    Shared OnlyOneStartMutex.l
    OnlyOneStartMutex = CreateMutex_(0, 1, *MutexName)
    OnlyOneStartError.l = GetLastError_()
    If OnlyOneStartMutex <> 0 And OnlyOneStartError = 0
        ProcedureReturn 1
    Else
        CloseHandle_(OnlyOneStartMutex)
        End
    EndIf
EndProcedure

;close the screensaver
Procedure OnlyOneSCRStop()
    CloseHandle_(OnlyOneStartMutex)
EndProcedure
...
;start only one instance of the program!
OnlyOneSCRStart(ScreensaverName)

;deal with the Parameters passed to this program
Select Parameter
    Case "" ;double clicked
        ExecuteConfiguration()
    Case "A" ;check password
        End
    Case "C" ;'Settings' button clicked in the screensaver dialog
        ExecuteConfiguration()
    Case "P" ;when the preview is requested in the screensaver dialog by selecting this screensaver
        ExecutePreview()
    Case "S" ;launch the main screensaver after an interval or by pressing 'Preview' in the dialog
        ExecuteScreenSaver()
EndSelect

;stop monitoring to see if one instance is running
OnlyOneSCRStop()
End 
bon ben là , je crois que j'ai réuni suffisamment d'infos , je vais pouvoir commencer à faire le mien :)

Merci pour vos réponses .

[EDIT]
Je viens de lire le tuto de Hardy , super , ça éclaire ma lanterne .

Publié : dim. 20/févr./2005 11:11
par nico
comtois a écrit : Reste à trouver comment faire en sorte qu'il n'y ait qu'une seule instance ?
J'avais donné un exemple sur le Forum, les mutexs ne sont pas très difficiles à comprendre; c'est le même principe que le jeton.

Publié : dim. 20/févr./2005 11:18
par comtois
effectivement , je ne l'avais pas vu , en cherchant mieux , j'ai trouvé :)

en fait , j'utilise surtout ma mémoire plutôt que la fonction rechercher, et je ne m'en souvenais pas de ce post :)

Merci pour l'info.

Publié : dim. 20/févr./2005 11:20
par Le Soldat Inconnu

Publié : dim. 20/févr./2005 19:28
par comtois
En reprenant les trucs à droite et à gauche , j'ai réussi à faire mon écran de veille , avec la configuration , la prévisualisation dans la petite fenêtre , etc ...

Maintenant , j'ai un autre souci . Quand je fais une configuration de l'écran de veille , j'ai le choix entre la base de registres et un fichier ini pour sauvegarder les préférences , comme je n'aime pas toucher à la base de registres , j'ai opté pour le fichier ini . Mon problème c'est que windows enregistre mon fichier dans le dossier Documents and settings . par contre , quand je demande à le charger , je ne sais pas définir dans quel répertoire il se trouve ce fichier .

je m'explique
pour la sauvegarde ,je fais

Code : Tout sélectionner

CreatePreferences("Polygone.ini")
sans indication de chemin , je pensais donc retrouver ce fichier dans le répertoire windows , vu que c'est là que se trouve mon prog .
bon ok , windows l'enregistre ailleurs ,pourquoi pas ,c'est logique et c'est mieux ainsi , mais bon , il pourrait aussi aller le chercher tout seul là où il l'a mis quand je lui demande un

Code : Tout sélectionner

OpenPreferences("Polygone.ini")
alors voila , la question c'est , comment je fais pour récupérer le fichier ?
le chemin va dépendre de la session ouverte si j'ai bien compris , mais comment retrouver le fichier ?

Publié : dim. 20/févr./2005 19:42
par Anonyme2
Essaye d'enregistre l'ini là ou est ton fichier avec une code comme ceci

Code : Tout sélectionner

         FichierPreference.s = Space(255)
                  GetModuleFileName_(0, @FichierPreference, 255)
                  FichierPreference = GetPathPart(FichierPreference)
                  If Right(FichierPreference, 1) <> "\"
                        FichierPreference + "\"
                  EndIf
                  FichierPreference + "Polygone.ini"

et tu le charges en retrouvant le chemin de la même manière

Publié : dim. 20/févr./2005 19:45
par comtois
super , merci Denis

Je vais tester ça , et je te dirai si c'est bon ( peut-être pas ce soir )

Encore merci

Publié : dim. 20/févr./2005 20:01
par comtois
Je viens de faire un test rapide , et effectivement , le fichier ini est bien écrit dans le répertoire Windows , par contre , je n'arrive pas à le charger , il me prend toujours les paramètres par défaut du fichier préférence.
bon , il faut que je regarde ça de plus près , il y a peut-être une erreur dans mon code .

encore merci

Publié : dim. 20/févr./2005 20:41
par comtois
j'ai mis un message pour afficher le chemin complet du fichier , et il va bien lire dans le bon répertoire . Apparemment le problème est dans mon code , mais je ne sais pas encore pourquoi il me prend les valeurs par défauts plutôt que les valeurs du fichier . bon , je ferai d'autres tests la semaine prochaine , j'arrête là pour l'instant.

[EDIT]
YAHOU !!
ça marche , je ne sais pas pourquoi , mais ça marche :)

Beta de l'écran de veille

Publié : lun. 21/févr./2005 22:50
par comtois
voila une première version de l'écran de veille ,pas de code pour l'instant.

j'ai encore quelques bricoles à faire et je le mettrai avec l'archive.

http://perso.wanadoo.fr/comtois/sources/polygone.zip

[EDIT] :oops: euh j'avais oublié de le mettre en ligne , voila c'est fait.
désolé pour ceux qui ont téléchargé le zip avec polygone.exe :? c'est pas le bon fichier.