Position Wallpaper

Signaler
Messages postés
572
Date d'inscription
mardi 30 avril 2002
Statut
Membre
Dernière intervention
4 mai 2020
-
Messages postés
572
Date d'inscription
mardi 30 avril 2002
Statut
Membre
Dernière intervention
4 mai 2020
-
Salut



Comment faire pour modifier la position du fond d ecran ?? (Etirer, normal, mosaïque)



Merci d avance !

Herve

18 réponses

Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
30
ça se trouve dans la Base de Registre.

HKEY_CURRENT_USER\Control Panel\Desktop\WallpaperStyle
avec pour valeur de chaîne 0 (Normal), 1 (Centrer), 2 (Etirer)


HKEY_CURRENT_USER\Control Panel\Desktop\TileWallpaper
avec pour valeur de chaîne 0 (Mosaïque) ou 1 (Normal)

ça c'est les valeurs théoriques, la réalité est tout autre, pour Windows XP en tout cas
Centré: Wallpaper 0 TileWallpaper 0Mosaïque: Wallpaper 0 TileWallpaper 1 Strech: Wallpaper 2 TileWallpaper 0

Daniel
Messages postés
572
Date d'inscription
mardi 30 avril 2002
Statut
Membre
Dernière intervention
4 mai 2020

Ok j ai deja essaye cela ....

mais comment faire pour faire un refresh du fond d ecran pour qu il
prenne en compte les changement, parce que en refaisant un
SystemParametersInfo il me retourne une erreur .

Herve
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
30
SystemParametersInfo marche bien pourtant, inutile de redémarrer la machine.

sFile est le nom complet du fichier BMP

SystemParametersInfo 20, 0&, ByVal xFile, &H2 Or &H1

Daniel
Messages postés
572
Date d'inscription
mardi 30 avril 2002
Statut
Membre
Dernière intervention
4 mai 2020

ok

faudras que je reessaie



merci

Herve
Messages postés
572
Date d'inscription
mardi 30 avril 2002
Statut
Membre
Dernière intervention
4 mai 2020

marche pas .....je ne comprends pas



RetVal = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, WALLPAPER_BMP, 1)



retval est toujours a 0 !







Herve
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
30
je suppose que tu as le chemin complet dans WALLPAPER_BMP, les paramètres &H1 et &H2 je sais pas s'ils sont nécessaires, le plus important c'est le Byval (le deuxième n'est pas obligatoire s'il est dans la déclaration).

Const SPIF_UPDATEINIFILE = &H1
Const SPIF_SENDWININICHANGE = &H2


Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByVal<STRIKE> </STRIKE>
lpvParam As Any, ByVal fuWinIni As Long) As Long

RetVal = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, Byval WALLPAPER_BMP, SPIF_UPDATEINIFILE or SPIF_SENDWININICHANGE)

Daniel
Messages postés
572
Date d'inscription
mardi 30 avril 2002
Statut
Membre
Dernière intervention
4 mai 2020

en mettant :

RetVal = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, ByVal WALLPAPER_BMP, 1)



ca a l air de marcher !!!

j ai pas compris la !!!! Pourquoi ici le Byval est necessaire alors qu autre part dans mon app il n est pas necessaire??



le pire c qu il n y avait pas moyen de recupere le type d erreur quand ce ne marchais pas.



Encore merci !


Herve
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
30
"autre part" ça veut dire quoi, comment tu utilises SystemParametersInfo autrement ?

il y a 2 cas ou tu passes la chaine par Byval dans ce cas VB crée une copie de la chaîne et renvoie un pointeur, sinon tu passes directement un pointeur qui pointe sur la chaine, mais ça risque de ne pas marcher parce que la chaîne sera en Unicode et ...
bref, bien compliqué tout ça, le principal c'est que ça marche...

une question: combien tu peux mettre de fichiers dans ton Wallpaper ?

Daniel
Messages postés
572
Date d'inscription
mardi 30 avril 2002
Statut
Membre
Dernière intervention
4 mai 2020

en fait j utilise "SystemParametersInfo " une fois pour changer le fond d ecran, et la ca marche sans le ByVal.

La ou j avais un probleme c est lorsque je voulais changer la position du fond d ecran.



Sinon dans mon prog Wallpaper , je peux mettre un nombre "illimite" de
fichier. j ai reussis a faire un programme qui charge rapidement ma
tres grande liste de fond d ecran (+ de 13000)!

je travaille en ce moment pour essaye de limiter l occupation en memoire du prog !

InMem Kb : 11220

Private Kb : 14586

Total Kb : 68384



un peu beaucoup non ?


Herve
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
30
j'en ai plus de 18000 et je sais pas combien j'ai d'occupation mémoire
le fichier fait que 300k, c'est la ListView qui doit prendre de la place.

en testant vite fait, je compte une vingtaine de Mo utilisé.

pour le ByVal j'en ai aucune idée, pourquoi ça marcherait sans et après avec, L'API étant le même, ça devrait réagir de la même façon.

comment tu changes la position avec SystemParametersInfo ?

Daniel
Messages postés
572
Date d'inscription
mardi 30 avril 2002
Statut
Membre
Dernière intervention
4 mai 2020

Ben en fait je fais les modifs dans la base de registre et je fais reaffiche le fond d ecran avec SystemParametersInfo pour obtenir un refresh.



tu as aussi fais un programmes pour les fonds d ecrans ?


Herve
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
30
ça doit être le même "SystemParametersInfo" si c'est pour afficher le même fichier, donc avec Byval non ?
j'ai pas inclus la routine pour centrer les images, ça devrait être fait depuis longtemps mais puisque je n'utilise plus que mon programme, il reste sur la position "center" et n'en bougera plus, surtout pas "strech" affreux !

mon Wallpaper a aussi un nombre illimité d'images, les répertoires sont dans un fichier à part, que je modifie à la main pour l'instant, j'ai abandonné
le browse répertoire et le multisélection, trop long, un double click sur le nom du répertoire et il se met à jour automatiquement, ça prend 2 secondes par répertoire.
il fait aussi Screen Saver, au bout d'un moment, si pas d'activité il se déclenche, ferme toutes les fenêtres, et c'est parti pour le diaporama, réglage de 10 secondes à 23H59m59s

Daniel
Messages postés
572
Date d'inscription
mardi 30 avril 2002
Statut
Membre
Dernière intervention
4 mai 2020

En fait dans mon prog je mets la position en fonction de la taille de l image....

pour les images inferieurs a 640*480 -> Mosaique

pour les images avec un ratio de 4/3 ou 5/4 -> Etirer

sinon c est centrer !



sinon pour les fichiers , je garde le repertoire principale, et ensuite
je scanne tous les sous-repertoires pour faire ma liste de fichier !


le plus embetant est de classer les fichiers et de "detecter" les doublons !


Herve
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
30
j'ai laissé "center" pour toutes les images qui sont cadrées à la taille de l'écran soit en hauteur, soit en largeur, c'est suffisant pour moi.

pour les doublons, je trie sur le nom et je fait une recherche dichotomique et ensuite je vérifie si le répertoire est le même ou pas avec un autre boucle, mais comme le programme est en sans cesse évolution, je vais surement encore optimisé avec une colonne cachée qui contiendra le numéro de répertoire + le nom, et une seule boucle suffira.
sinon pendant la recherche, le Sorted est mis sur False, et le Enabled également, ça va très vite, 15 boucles de recherche pour 18000.

sais tu que quand tu modifie le tri, la colonne et le type ascendant ou descendant, le tri est fait 2 fois et ça prend 2 fois plus de temps.
sais tu aussi que quand le tri est le même, même colonne et même type, cela prend également du temps alors qu'il n'y a rien à faire ?
d'où l'utilité de tester si le tri est nécessaire avant de le lancer, et de mettre le Sorted à False, de modifier les paramètres de tri, et ensuite de remettre à True.

Daniel
Messages postés
572
Date d'inscription
mardi 30 avril 2002
Statut
Membre
Dernière intervention
4 mai 2020

Ah oui c bon a savoir !



y aurait il moyen d avoir un exemplaire de ton prog ?

Herve
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
30
va voir dans ta boîte

Daniel
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
30
j'ai réussi à faire marcher ton code.
quelques problèmes de démarrage avec un fichier vide mais vite résolu.la Progressbar n'accepte pas Max 0, j'ai mis un test pour ne pas faire si NbFichier 0. et dans le fichier ini pour DernierRep à la place de D:\ j'ai mis C:\ avec un répertoire vide.
sinon dans l'ensemble, très bien écrit avec des commentaires et tout, chose que j'ai pas faite.
j'ai pas tout regardé en détail mais j'ai vu des fonctions comme MajtoMin et MintoMaj, elles sont pas utilisées dans le projet, mais est-ce que Ucase$ et Lcase$ ne suffisent pas ?
est-ce qu'on peut modifier la péride d'affichage des images ?

Daniel
Messages postés
572
Date d'inscription
mardi 30 avril 2002
Statut
Membre
Dernière intervention
4 mai 2020

Ok...



c vrai que je n utilise pas MajtoMin et MintoMaj, oui
Ucase$ et Lcase$ suffiraient
. En
fait elle font partie d un ensemble de fonction qui sont dans le
fichier BAS , et que je recopie dans les projets en fonction de mes
besoins.



pour le moment la periode d affichage n est que pour chaque heure fixe,
mais je compte mettre plus d options (tous les jours, toutes les x
minutes, etc ....)



thx


Herve