Ecran de veille

Programmation d'applications complexes
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Ecran de veille

Message 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 :)
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message 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
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message 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 .
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message 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 ?
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Il me semble que Hardy avait fait un tuto sur les mutex
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message 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 .
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message 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.
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message 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.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message 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 ?
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

super , merci Denis

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

Encore merci
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message 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
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message 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 :)
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Beta de l'écran de veille

Message 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.
Répondre