Image bureau sans icones [Résolu]

Signaler
Messages postés
41
Date d'inscription
mercredi 26 février 2003
Statut
Membre
Dernière intervention
16 juillet 2007
-
ORTIPIC
Messages postés
41
Date d'inscription
mercredi 26 février 2003
Statut
Membre
Dernière intervention
16 juillet 2007
-
Salut a tous

comment copier dans une picturebox l image du bureau Sans les icones ni les fenetres

Merci
FAB

11 réponses

Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
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

Dis-moi (ou quelqu'un d'autre)
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
De quoi parles-tu, exactement ?
Du papier-peint ?
Messages postés
266
Date d'inscription
mardi 7 septembre 2004
Statut
Membre
Dernière intervention
30 avril 2009

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 :

mode copie = &HCC0020

Cela donne :

StretchBlt
Picture1.hdc, 0, 0, Picture1.Width, Picture1.Height, DC_bureau, 0, 0,
Screen.Width, Screen.Height, &HCC0020

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
Messages postés
266
Date d'inscription
mardi 7 septembre 2004
Statut
Membre
Dernière intervention
30 avril 2009

Oups, manque un bout:


 I) Handle des icônes du bureau

Dim handle_Ibureau as
double
' le nom de classe des icônes du bureau et
"Progman"
handle_Ibureau = FindWindow("Progman",
vbNullString)

II) Masquer les icônes du
bureau

ShowWindow handle_Ibureau, 0

III)
Afficher les icônes du bureau

ShowWindow handle_Ibureau, 8

Et après tu fais ton screenshot comme décris avant
Messages postés
292
Date d'inscription
samedi 25 février 2006
Statut
Membre
Dernière intervention
22 février 2009

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
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
Voilà la clef et la valeur (en gras):

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Desktop\General]
"WallpaperFileTime"=hex:00,00,00,00,00,00,00,00
"ComponentsPositioned"=dword:00000001
"TileWallpaper"="0"
"WallpaperStyle"="0"
"Wallpaper"="D:\\superdeb.jpg"
"BackupWallpaper"=""
"WallpaperLocalFileTime"=hex:00,68,c4,61,08,00,00,00

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 ...
Messages postés
41
Date d'inscription
mercredi 26 février 2003
Statut
Membre
Dernière intervention
16 juillet 2007

Merci

 zavier666

cool ta reponce
hela les fenetres ouvertes sont copies aussi

 jmfmarques

je garde ta solution sous le coude (pour les memes raisons que toi)

qui saura me virer ces fenetres

FAB
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
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 ?)
Messages postés
41
Date d'inscription
mercredi 26 février 2003
Statut
Membre
Dernière intervention
16 juillet 2007

BRAVO

jmfmarques

oui ca fonctionne parfaitement ( sous xp pour moi )

car mes essais de mon coté avec paintdesktop ne fonctionnés pas

Merci
FAB
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
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.

Fini en ce qui me concerne.
Messages postés
41
Date d'inscription
mercredi 26 février 2003
Statut
Membre
Dernière intervention
16 juillet 2007

jmfmarques


merci pour cette derniere info

et encore merci pour l'aide que tu m'as apporté

FAB