Image bureau sans icones

Résolu
ORTIPIC Messages postés 41 Date d'inscription mercredi 26 février 2003 Statut Membre Dernière intervention 16 juillet 2007 - 6 févr. 2007 à 16:20
ORTIPIC Messages postés 41 Date d'inscription mercredi 26 février 2003 Statut Membre Dernière intervention 16 juillet 2007 - 8 févr. 2007 à 14:46
Salut a tous

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

Merci
FAB

11 réponses

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

Dis-moi (ou quelqu'un d'autre)
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
6 févr. 2007 à 16:26
De quoi parles-tu, exactement ?
Du papier-peint ?
0
zavier666 Messages postés 266 Date d'inscription mardi 7 septembre 2004 Statut Membre Dernière intervention 30 avril 2009 1
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 :

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
0
zavier666 Messages postés 266 Date d'inscription mardi 7 septembre 2004 Statut Membre Dernière intervention 30 avril 2009 1
6 févr. 2007 à 17:01
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
VBGenesis Messages postés 292 Date d'inscription samedi 25 février 2006 Statut Membre Dernière intervention 22 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
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
6 févr. 2007 à 18:21
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 ...
0
ORTIPIC Messages postés 41 Date d'inscription mercredi 26 février 2003 Statut Membre Dernière intervention 16 juillet 2007
6 févr. 2007 à 19:09
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
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
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 ?)
0
ORTIPIC Messages postés 41 Date d'inscription mercredi 26 février 2003 Statut Membre Dernière intervention 16 juillet 2007
7 févr. 2007 à 17:46
BRAVO

jmfmarques

oui ca fonctionne parfaitement ( sous xp pour moi )

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

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

Fini en ce qui me concerne.
0
ORTIPIC Messages postés 41 Date d'inscription mercredi 26 février 2003 Statut Membre Dernière intervention 16 juillet 2007
8 févr. 2007 à 14:46
jmfmarques


merci pour cette derniere info

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

FAB
0
Rejoignez-nous