jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 7 févr. 2007 à 15:29
Je viens de faire celà qui fonctionne sur ma machine (Win 2000 Pro) . Je serais intéressé (et compte sur toi) à savoir ce que celà donne sur la tienne, en me précisant ton OS.
Sur une Form :
14 pictureBox Picture1
Code
Private Declare Function PaintDesktop Lib "user32" (ByVal hdc As Long) As Long
Private Sub Form_Activate()
With Me
.AutoRedraw = False
.ScaleMode = 3
.Move 0, 0, Screen.Width, Screen.Height
End With
Picture1.Move 0, 0, Screen.Width, Screen.Height
DoEvents
PaintDesktop Picture1.hdc
DoEvents
Picture1.AutoRedraw = True
End Sub
zavier666
Messages postés266Date d'inscriptionmardi 7 septembre 2004StatutMembreDernière intervention30 avril 20091 6 févr. 2007 à 16:59
D'abord tu masque les icônes:
I) Obtenir le DC du bureau
Dans un premier temps, on
recherche le handle du bureau :
Handle_bureau = GetDesktopWindow
Puis
on recherche le DC du bureau :
DC_bureau =
GetDC(handle_bureau)
II) dimensionner la
PictureBox
Afin que l’image ne soit pas déformée, il est nécessaire
de bien dimensionner la taille de la PictureBox :
Picture1.Width =
Screen.Width
Picture1.Height = Screen.Height
Picture1.ScaleWidth =
Screen.Width
Picture1.ScaleHeight = Screen.Height
III)
transférer l’image
L’api StretchBlt demande de renseigner pour la
source et la destination :
le contexte de périphérique (DC)DC
les
points de départ: x,y
les points d’arrivée: largeur,
hauteur
Ensuite il faut donner le mode de fonctionnement de l’api :
L’image ainsi affichée dans la
PictureBox peut être sauvegardée :
'Il est important de mettre cette première
ligne pour que Picture1.Picture ne soit pas vide ce qui empêcherait
l'enregistrement
Picture1.Picture = Picture1.Image
SavePicture
Picture1.Picture, « c:\essai.bmp »
Pour l'utilisation des API ainsi que le téléchargement de fichiers sources: API @ la Loupe http://xav.prog.power.free.fr
VBGenesis
Messages postés292Date d'inscriptionsamedi 25 février 2006StatutMembreDernière intervention22 février 2009 6 févr. 2007 à 18:12
Je crois qu'il y a une méthode plus simple zavier666 : il me semble me souvenir qu'il y a une clé dans le registre qui indique où est stockée l'image utilisée en fond d'écran. Il n'y a qu'à ouvrir cette image dans la propriété picture de l'image. Pour cette clé il faut chercher, je ne sais plus où je l'ai vu.
VBGenesis
Ceci étant dit : je ne suis pas d'accord, pour plusieurs raisons ....
Ce qu'il convient de faire est réellement de relever le papier peint en cours ... qui peut de surcroît être affiché de diverses manières ...
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 7 févr. 2007 à 07:57
Il te faut utiliser la fonction PaintDesktop de la librairie user32 de l'APi de Windows.
Il te faudra probablement te servir de 2 pictureboxes, dont l'une en tremplin et dont l'autre pourra être dessinée à partir de ce tremplin par utilisation de la méthode OauntPicture de VB ou encore (mieux, pendant que tu y es) par utilisation de la fonction StretchBlt de la librairie gdi32 de l'Api de Windows.
Il n'est pas impossible que tu n'obtiennes pas toujours le papier-peint récemment modifié. Il se peut que tu n'obtiennes de cette façon que le dernier validé et après redémarrage de Windows.
Il te faudra par ailleurs jouer avec les propriétés autoredraw des 2 pictureboxes, les dimensions de ton écran (à donner, en pixels, à la picturebox tremplin) et donner des dimensions calculées proportionnellement à la picturebox d'affichage si tu ne veux pas de distorsion de ton image.
J'ajoute que si ton image d'affichage est trio petite d'une part et que, d'autre part, le motif de ton papier peint n'occupe dans une grande surface de ton bureau, la réduction ipérée pour l'affichage le rendra pratiquement invisible.
Voilà : tu as tous les éléments, maintenant. A toi de jouer.
Une question, toutefois : quel est l'intérêt de tout celà ? (beaucoup de travail, mais pourquoi donc ?)
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 7 févr. 2007 à 20:12
Bien (je prends bonne note de ce que cela tourne également sous XP. Merci)
Juste une petite chose, pour toi, maintenant :
Si tu dois sauvegarder cette image, attention : sa taille est très grande !!!
Utilise PaintPicture ou la fonction StrecthBlt pour la réduire dans une deuxième pictureBox et n'oublie pas que la sauvegarde devra être précédée d'une formule telle que Picturex.picture = Picturex.Image... ou encore : faire la sauvegarde directement sur la propriété .image de la pictureBox réduite.