Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

DIRECTX OVERLAY - CHANGE WALLPAPER ON DESKTOP WITH DIRECTX


Information sur la source

Catégorie :DirectX / OpenGL Source .NET ( DotNet ) Classé sous : overlay, wallpaper, DirectDraw, OverlayEffects, fondu Niveau : Initié Date de création : 30/10/2008 Date de mise à jour : 20/04/2009 18:23:55 Vu / téléchargé: 2 585 / 118

Note :
7 / 10 - par 1 personne
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Vous trouverez le programme compilé et l'installeur à cette addresse:
http://overlaypaper.sourceforge.net/

vous trouverez les derniers codes pour ce programme sur le repository de sourceforge:
http://overlaypaper.svn.sourceforge.net/viewvc/overlaypaper/

Merci de me le faire savoir si quelqu'un veut contribuer à l'avancement de ce projet
Information pour la compil:
*Telecharger libvlc.dll et le repertoire des plugins de vlc 0.8.x
à cette addresse http://download.videolan.org/pub/videolan/vlc/

*Telecharger mediainfo
à cette addresse:
http://mediainfo.sourceforge.net
mettre le tout dans debug/release

pour la compil du script nsis mettre toutes les librairies dans release.
Description:

Voici mon premier prog en C#...
J'avais plutôt l'habitude de programmer soit en C++ api win32 ou pour mon taf en vb.net.

Je suis finalement pas trop fan de C#, il a les défaut de C++ et pas aussi intuitif que vb.net. bref à l'avenir je préférerai soit coder en api win32 soit en vb.net.

J'ai téléchargé les sources de vlc 0.9.4, et adapter le directx-wallpaper sur ce prog uniquement pour les wallpapers.

J'ai repris pas mal de code traduit en C# de vlc et également le BLit d'une source sur code project (overlay tool).
je tenais aussi à dire que l'equipe de vlc sont des bêtes, leur code est incroyable.

 

Source

  • //overlay trick: desktop color:0x80010
  • //OverlayEffects avec color: ck.ColorSpaceLowValue = ck.ColorSpaceHighValue = 0x100008;
  • // OverlayDirectX
  • //Première étape enlevé le wallpaper et mettre a black pour Overlay:
  • private void SwitchWallpaperMode(bool onOff)
  • {
  • int[] elements = { 1 };
  • if (onOff)
  • {
  • int[] backgorund = { ColorTranslator.ToWin32(SystemColors.Desktop) }; //save the current desktop color
  • color_bkg = backgorund;
  • int[] colors = { 0x80010 };
  • SetSysColors(elements.Length, elements, colors); // put black to the desktop color
  • SystemParametersInfo(20, 0, "", 0); //remove wallaper
  • ToggleScreenSaverActive(onOff); //switch off the screensaver
  • }
  • else
  • {
  • SetSysColors(elements.Length, elements, color_bkg); //restore old desktop color
  • SystemParametersInfo(20, 0, null, 0); //restore wallpaper
  • ToggleScreenSaverActive(onOff); //switch on the screensaver
  • }
  • }
  • //Deuxième étape DirectXInitDDraw (initialise les directdraw surface:
  • private void DirectXInitDDraw()
  • {
  • _displayDevice = new Microsoft.DirectX.DirectDraw.Device(); //create the device
  • _displayDevice.SetCooperativeLevel(null, CooperativeLevelFlags.Normal);
  • SurfaceDescription description = new SurfaceDescription();
  • description.SurfaceCaps.PrimarySurface = true;
  • _front = new Surface(description, _displayDevice); //set the front to the primary surface
  • description.Clear();
  • description.SurfaceCaps.Overlay = true; //prepare the description of overlay surface
  • description.SurfaceCaps.Flip = true;
  • description.SurfaceCaps.Complex = true;
  • //description.SurfaceCaps.VideoMemory = true;
  • description.Width = _screenWidth;
  • description.Height = _screenHeight;
  • description.BackBufferCount = 1;
  • PixelFormat pxFrmt;
  • pxFrmt.FourCC = 0x32595559; //Yuv2
  • pxFrmt.FourCcIsValid = true;
  • description.PixelFormatStructure = pxFrmt;
  • overlay = new Surface(description, _displayDevice);
  • SurfaceCaps caps = new SurfaceCaps();
  • caps.BackBuffer = true;
  • _back = overlay.GetAttachedSurface(caps); //caps surface
  • ColorKey ck = new ColorKey();
  • ck.ColorSpaceLowValue = ck.ColorSpaceHighValue = 0x100008; //color overlay effect to draw on desktop color 0x80010 (see SwitchWallpaperMode)
  • overFX.DestinationColorKey = ck;
  • overFX.ArithmeticStretchY = true;
  • }
  • //troisieme étape
  • //blit un bitmap to backbuffer
  • //exemple:
  • //Blit((Bitmap)m_RenderTarget, _back);
  • //overlay.Flip(null, FlipFlags.Wait);
  • //voir code pour le blit c'est du GDI+
  • //Attention à la première image updaté l'overlay ex:
  • //overlay.UpdateOverlay(_back, OverlayFlags.Show | OverlayFlags.Effects | OverlayFlags.KeyDestinationOverride, overFX); //update overlay for the first time
  • //Class Transition
  • //voir class pour code du birghtness et setcolormatrix pour l'opacity.
//overlay trick: desktop color:0x80010
//OverlayEffects avec color: ck.ColorSpaceLowValue = ck.ColorSpaceHighValue = 0x100008;


// OverlayDirectX
//Première étape enlevé le wallpaper et mettre a black pour Overlay:
        private void SwitchWallpaperMode(bool onOff)
        {

            int[] elements = { 1 };
            if (onOff)
            {
                int[] backgorund = { ColorTranslator.ToWin32(SystemColors.Desktop) }; //save the current desktop color
                color_bkg = backgorund;
                int[] colors = { 0x80010 };
                SetSysColors(elements.Length, elements, colors); // put black to the desktop color
                SystemParametersInfo(20, 0, "", 0); //remove wallaper
                ToggleScreenSaverActive(onOff); //switch off the screensaver
            }
            else
            {
                SetSysColors(elements.Length, elements, color_bkg); //restore old desktop color
                SystemParametersInfo(20, 0, null, 0); //restore wallpaper
                ToggleScreenSaverActive(onOff); //switch on the screensaver
            }

        }
//Deuxième étape DirectXInitDDraw (initialise les directdraw surface:
        private void DirectXInitDDraw()
        {
            _displayDevice = new Microsoft.DirectX.DirectDraw.Device(); //create the device
            _displayDevice.SetCooperativeLevel(null, CooperativeLevelFlags.Normal);
            SurfaceDescription description = new SurfaceDescription();
            description.SurfaceCaps.PrimarySurface = true;
            _front = new Surface(description, _displayDevice); //set the front to the primary surface
            description.Clear();
            description.SurfaceCaps.Overlay = true;  //prepare the description of overlay surface
            description.SurfaceCaps.Flip = true;
            description.SurfaceCaps.Complex = true;
            //description.SurfaceCaps.VideoMemory = true;
            description.Width = _screenWidth;
            description.Height = _screenHeight;
            description.BackBufferCount = 1;

            PixelFormat pxFrmt;
            pxFrmt.FourCC = 0x32595559; //Yuv2
            pxFrmt.FourCcIsValid = true;

            description.PixelFormatStructure = pxFrmt;
            overlay = new Surface(description, _displayDevice);
            SurfaceCaps caps = new SurfaceCaps();
            caps.BackBuffer = true;

            _back = overlay.GetAttachedSurface(caps); //caps surface
 
            ColorKey ck = new ColorKey();
            ck.ColorSpaceLowValue = ck.ColorSpaceHighValue = 0x100008; //color overlay effect to draw on desktop color 0x80010 (see SwitchWallpaperMode)

            overFX.DestinationColorKey = ck;
            overFX.ArithmeticStretchY = true;


        }

//troisieme étape
//blit un bitmap to backbuffer
//exemple:
//Blit((Bitmap)m_RenderTarget, _back);
//overlay.Flip(null, FlipFlags.Wait);
//voir code pour le blit c'est du GDI+
//Attention à la première image updaté l'overlay ex:
//overlay.UpdateOverlay(_back, OverlayFlags.Show | OverlayFlags.Effects | OverlayFlags.KeyDestinationOverride, overFX); //update overlay for the first time
                    
//Class Transition
//voir class pour code du birghtness et setcolormatrix pour l'opacity.

Conclusion

Elle autorise le drag and drop et gère quelques événements (Buttons/radio buttons/image preview etc...)
En espérant que cela aide certaine personne dans le direct x, ou il faut avouer que ce n'est pas aussi documenter et même sur le web on trouve peu d'exemples que le reste.

voilou.
@+
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

30 octobre 2008 17:00:39 :
rajout du post fait sur www.codeproject.com
08 novembre 2008 23:43:09 :
*suppression de l'addresse codeproject... *Modification sur la taille du screen (bounds au lieu de workingarea). *remplacement de l'arraylist de bitmap par une class stockant le memorystream du bitmap en jpg, ce qui est beaucoup mois gourmand en ram. *je travail encore sur l'adaptation ffmpeg pour le C#, pas évident car ne peut être compilé avec visual. et je travail également sur le fondu qui prend trop de cpu, je suis entrain de voir comment diminuer l'alpha du front (surface) pour qu'il fade sur le background pour éviter la surcharge cpu.
12 novembre 2008 14:00:57 :
*Modification du code: fondu au blanc (beaucoup moins gourmand en ressource). Je suis entrain de creer une class avec les différents transition possible. fondu au blanc, au noir, opacité, etc... Je sais il me reste les commentaires qui viennent (note qu'il y a plein de void qui ne marche pas encore)
13 novembre 2008 21:40:27 :
*bon voila dernière mise ajour: *Création de radio button pour choisir les transitions(white/black/opacity) *Amélioration mémoire
14 novembre 2008 16:18:53 :
*double click de la play list added. *si overlay non lancé il lance a l'index selected *sinon si running il rempli l'overlay surface avec l'index choisit au prochain call du thread.
04 mars 2009 16:31:00 :
Nouvelle Version... les MAJ: *correction de quelques bugs. *rotation automatiques des images en fonction des informations EXIF si elles sont présente dans la photo. *Support des videos à l'aide de libvlc.dll -il faut copier libvlc et le repertoire des plugins dans debug ou release pour le faire fonctionner. -adresse: http://download.videolan.org/pub/videolan/vlc/ J'utilise la version 0.8.6i, à partir de 0.9.x il y a problème de détection de libvlc. *Script NSIS inclut: -il faut que libvlc et plugins soit present dans release. *OS: Xp/Vista-32, la version 64 renvoi une erreur sur la class OverlayDirectX et ne trouve pas libvlc.
05 mars 2009 11:49:45 :
Ajout de l'adresse Sourceforge pour l'installer
16 mars 2009 12:20:00 :
Ajout d'une treeview a la place de la list view / ajout de différents menustrips/gestion de playlist au format xml/ ajout de mediainfo pour les détails des médias/gestion d'un multiple select de la treeview/ajout de tooltips/rotation automatique des images si EXIF présent
20 avril 2009 18:23:58 :
Mise ajour de version: 1.0Rc3

Commentaires et avis

signaler à un administrateur
Commentaire de Willi le 30/10/2008 19:55:14 administrateur CS 7/10

Il y a de bonnes choses et mais cela manque de commentaires pour comprendre certains points. ++

signaler à un administrateur
Commentaire de youpiyoyo le 30/10/2008 20:59:00

oui c'est mon défaut effectivement... mais comme pour moi ceci est un prog de test pour un autre programme, ce qui m'importe c'est la class overlay que j'ai créé. mais merci pour ton commentaire, j'ajouterai certaines explications sur la class overlay et non sur la form puisque c'est juste de la gestion d'evenement et donc rien de passionnant.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Managed DirectDraw [ par sebseb42 ] Bonjour a tous,Voila je voudrais utiliser DirectDraw dans une application, je voudrais savoir si vous saviez comment initialiser une fenetre DirectDra DirectDraw [ par RM50Man ] J'ai fais une belle bitmap rectangulaire, mais quand j essaye de l 'afficher elle est toute deformer, et elle est carré!!!Si quelqu'un peut m'aid DirectDraw [ par taupe4 ] Je commence la programmation avec DirectX 9.0b en c# mais j'aimerais savoir s'il y a une DLL pour DirectDraw. Si il y en a une , est-ce que quelqu'un Logiciel de changement de wallpaper [ par Seth77 ] Salut Je me suis fait un logiciel permettant de changer le fond d ecran de windows .. Si quelqu un veut bien l essayer et me donner son avis... http: Surbrillance dans une form [ par oximoron ] Bonjour à tous codes-sourciens,Je poste aujourd'hui, car je ne trouve pas de solution à mon problème. Cela fait plusieurs semaines (bon j'ai fait autr


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,671 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.