Accueil > > > FOND D'ÉCRAN CHANGEANT DE COULEUR EN FONCTION DE L'HEURE (WINDOWS)
FOND D'ÉCRAN CHANGEANT DE COULEUR EN FONCTION DE L'HEURE (WINDOWS)
Information sur la source
Description
Ce petit programme change le fond d'écran Windows une fois par minute. Il lui applique une couleur qui varie progressivement en fonction de l'heure de la journée, de façon à ce que la couleur soit toujours la même à une heure donnée (exemple : turquoise à midi). La variation ne s'observe donc pas de minutes en minutes, mais se perçoit d'un quart d'heure à l'autre par exemple. On peut donc avoir une idée grossière de l'heure qu'il est si on se souvient des couleurs... Il est conseillé d'avoir une version de Windows qui possède les barres transparentes pour pouvoir voir le fond d'écran du bureau à travers elles. Le programme regroupe quelques notions utiles tel que la lecture de l'heure, le changement du fond d'écran, la création d'un BMP (et sa sauvegarde) et enfin le masquage de la fenêtre d’exécution. Il est vrai que le code n'est pas très "propre" (tout dans la même page...), mais il est fortement commenté et bien indenté. Afin de réaliser ce programme, j'ai pas mal navigué sur internet pour trouver des réponses à mes problèmes, je me dois donc de citer mes sources surtout quand j'ai bien copié (BMP) : Merci à Eagl1 pour sa fonction pour créer un fichier BMP : http://www.developpez.net/forums/d671362/c-cpp/c pp/creation-bmp-cpp/ Merci au rédacteur de Hackers Life pour son astuce pour cacher la fenêtre facilement : http://hackerslife.blogspot.com/2005/01/hide-win dow-in-c.html Les fonctions de choix de couleurs sont un peu étranges, mais elles permettent de ne jamais avoir de nuances de gris, donc toujours des couleurs vives et visibles. Cette version est celle que j'utilise sur mon PC (Windows 7) donc elle devrait être fonctionnelle Astuce : Pour alléger le poids du BMP, il est créé d'une taille de 64x64px seulement, il faut donc dire à Windows d'étirer le fond d'écran avant de lancer le programme. J'ai aussi mis un raccourci de mon .exe dans les "Démarrage" ce qui le lance automatiquement au démarrage.
Source
- // Permet de tromper le compilateur et transforme le programme console en appli WIN32
- #define _WIN32_WINNT 0x0500
- #include <windows.h>
- #include <iostream>
- #include <time.h>
- #include <cstdlib>
- #include <math.h>
-
- using namespace std;
-
- void Create_Save_BMP(float hm,char path[]);
-
- int main()
- {
- // Ces deux premieres lignes permettent au programme de s'executer dans une fenetre console invisible
- // (sauf dans les processus biensur)
- HWND hWnd = GetConsoleWindow();
- ShowWindow( hWnd, SW_HIDE );
- // On cree les variables temporelles
- SYSTEMTIME st;
- int oldTime=0;
- // Chemin de destination du fond d'ecran (peut être par exemple C:\\TEMP)
- char path[]="D:\\Docs\\Wallpaper\\wallpaper.bmp";
-
- // Une petite boucle (pas tres propre je l'avoue) pour que le programme continue tout seul
- do {
- // on recupere l'heure actuelle
- GetLocalTime(&st);
- // Si on a une minute d'ecart avec la boucle d'avant, on peut alors modifier le papier peint
- if (abs(st.wMinute-oldTime)>0){
- // On creer un nouveau ficher bmp pour le papier peint
- // (pour rester compatible avec Windows qui gere mal les autres formats...)
- // on passe en argument l'heure actuelle exprimee en minutes et arrondie a 2 chiffres
- Create_Save_BMP(round(100*((float)(st.wHour*60+st.wMinute)/60))/100,path);
- // on modifie le papier peint en allant le chercher la ou on l'a enregistre avec la fonction precedente
- SystemParametersInfo( SPI_SETDESKWALLPAPER, 0, (PVOID)path, SPIF_UPDATEINIFILE );
- // on met a jour la sauvegarde du temps
- oldTime=st.wMinute;
- }
- }while(true);
- return 0;
- }
-
- // Fonction de creation et sauvegarde des BMPs
- void Create_Save_BMP(float hm,char path[]){
- // Initialisation des variables
- int r=0,g=0,b=0;
- // Si vous ne voulez pas etirer le fond d'ecran avec windows, vous pouvez mettre ici la resolution de votre ecran
- // Une taille importante (1280x800) ralentit le programme pour rien car un BMP c'est vite lourd...
- int iWidth = 64;
- int iHeight = 64;
- HANDLE file;
- BITMAPFILEHEADER fileHeader;
- BITMAPINFOHEADER fileInfo;
- RGBTRIPLE image;
- DWORD write = 0;
-
- // Creation du BMP a proprement parler
- file = CreateFile(path,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
- fileHeader.bfType = 19778;
- fileHeader.bfSize = sizeof(fileHeader.bfOffBits) + sizeof(RGBTRIPLE);
- fileHeader.bfReserved1 = 0;
- fileHeader.bfReserved2 = 0;
- fileHeader.bfOffBits = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
-
- fileInfo.biSize = sizeof(BITMAPINFOHEADER);
- fileInfo.biWidth = iWidth;
- fileInfo.biHeight = iHeight;
- fileInfo.biPlanes = 1;
- fileInfo.biBitCount = 24;
- fileInfo.biCompression = BI_RGB;
- fileInfo.biSizeImage = 0;
- fileInfo.biXPelsPerMeter = 0;
- fileInfo.biYPelsPerMeter = 0;
- fileInfo.biClrImportant = 0;
- fileInfo.biClrUsed = 0;
-
- WriteFile(file,&fileHeader,sizeof(fileHeader),&write,NULL);
- WriteFile(file,&fileInfo,sizeof(fileInfo),&write,NULL);
-
- // C'est ici que sont definies les couleurs en fonction des heures
- // il est possible de les definir aleatoirement (rand()) ou de changer les fonctions a votre guise
- if (hm<4||hm>20)r=255;
- else{
- if(hm>=4 && hm<8)r=255-255*(hm-4)/4;
- else{
- if(hm>16 && hm<=20)r=255*(hm-16)/4;
- else r=0;
- }
- }
- if (hm<12&&hm>4)g=255;
- else{
- if(hm>=12 && hm<16)g=255-255*(hm-12)/4;
- else{
- if(hm>0 && hm<=4)g=255*(hm-0)/4;
- else g=0;
- }
- }
- if (hm<20 && hm>12)b=255;
- else{
- if(hm>=20 && hm<24)b=255-255*(hm-20)/4;
- else{
- if(hm>8 && hm<=12)b=255*(hm-8)/4;
- else b=0;
- }
- }
- // on ecrit la couleur dans le fichier et on l'enregistre
- for (int i = 0; i < (iWidth*iHeight); i++)
- {
- image.rgbtRed = r;
- image.rgbtGreen = g;
- image.rgbtBlue = b;
-
- WriteFile(file, &image, sizeof(RGBTRIPLE), &write, NULL);
- }
- CloseHandle(file);
- }
// Permet de tromper le compilateur et transforme le programme console en appli WIN32
#define _WIN32_WINNT 0x0500
#include <windows.h>
#include <iostream>
#include <time.h>
#include <cstdlib>
#include <math.h>
using namespace std;
void Create_Save_BMP(float hm,char path[]);
int main()
{
// Ces deux premieres lignes permettent au programme de s'executer dans une fenetre console invisible
// (sauf dans les processus biensur)
HWND hWnd = GetConsoleWindow();
ShowWindow( hWnd, SW_HIDE );
// On cree les variables temporelles
SYSTEMTIME st;
int oldTime=0;
// Chemin de destination du fond d'ecran (peut être par exemple C:\\TEMP)
char path[]="D:\\Docs\\Wallpaper\\wallpaper.bmp";
// Une petite boucle (pas tres propre je l'avoue) pour que le programme continue tout seul
do {
// on recupere l'heure actuelle
GetLocalTime(&st);
// Si on a une minute d'ecart avec la boucle d'avant, on peut alors modifier le papier peint
if (abs(st.wMinute-oldTime)>0){
// On creer un nouveau ficher bmp pour le papier peint
// (pour rester compatible avec Windows qui gere mal les autres formats...)
// on passe en argument l'heure actuelle exprimee en minutes et arrondie a 2 chiffres
Create_Save_BMP(round(100*((float)(st.wHour*60+st.wMinute)/60))/100,path);
// on modifie le papier peint en allant le chercher la ou on l'a enregistre avec la fonction precedente
SystemParametersInfo( SPI_SETDESKWALLPAPER, 0, (PVOID)path, SPIF_UPDATEINIFILE );
// on met a jour la sauvegarde du temps
oldTime=st.wMinute;
}
}while(true);
return 0;
}
// Fonction de creation et sauvegarde des BMPs
void Create_Save_BMP(float hm,char path[]){
// Initialisation des variables
int r=0,g=0,b=0;
// Si vous ne voulez pas etirer le fond d'ecran avec windows, vous pouvez mettre ici la resolution de votre ecran
// Une taille importante (1280x800) ralentit le programme pour rien car un BMP c'est vite lourd...
int iWidth = 64;
int iHeight = 64;
HANDLE file;
BITMAPFILEHEADER fileHeader;
BITMAPINFOHEADER fileInfo;
RGBTRIPLE image;
DWORD write = 0;
// Creation du BMP a proprement parler
file = CreateFile(path,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
fileHeader.bfType = 19778;
fileHeader.bfSize = sizeof(fileHeader.bfOffBits) + sizeof(RGBTRIPLE);
fileHeader.bfReserved1 = 0;
fileHeader.bfReserved2 = 0;
fileHeader.bfOffBits = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
fileInfo.biSize = sizeof(BITMAPINFOHEADER);
fileInfo.biWidth = iWidth;
fileInfo.biHeight = iHeight;
fileInfo.biPlanes = 1;
fileInfo.biBitCount = 24;
fileInfo.biCompression = BI_RGB;
fileInfo.biSizeImage = 0;
fileInfo.biXPelsPerMeter = 0;
fileInfo.biYPelsPerMeter = 0;
fileInfo.biClrImportant = 0;
fileInfo.biClrUsed = 0;
WriteFile(file,&fileHeader,sizeof(fileHeader),&write,NULL);
WriteFile(file,&fileInfo,sizeof(fileInfo),&write,NULL);
// C'est ici que sont definies les couleurs en fonction des heures
// il est possible de les definir aleatoirement (rand()) ou de changer les fonctions a votre guise
if (hm<4||hm>20)r=255;
else{
if(hm>=4 && hm<8)r=255-255*(hm-4)/4;
else{
if(hm>16 && hm<=20)r=255*(hm-16)/4;
else r=0;
}
}
if (hm<12&&hm>4)g=255;
else{
if(hm>=12 && hm<16)g=255-255*(hm-12)/4;
else{
if(hm>0 && hm<=4)g=255*(hm-0)/4;
else g=0;
}
}
if (hm<20 && hm>12)b=255;
else{
if(hm>=20 && hm<24)b=255-255*(hm-20)/4;
else{
if(hm>8 && hm<=12)b=255*(hm-8)/4;
else b=0;
}
}
// on ecrit la couleur dans le fichier et on l'enregistre
for (int i = 0; i < (iWidth*iHeight); i++)
{
image.rgbtRed = r;
image.rgbtGreen = g;
image.rgbtBlue = b;
WriteFile(file, &image, sizeof(RGBTRIPLE), &write, NULL);
}
CloseHandle(file);
}
Conclusion
Possibilités d'amélioration : - mettre l'application en System Tray - avoir une interface graphique pour choisir les couleurs - faire en sorte que Windows étire automatiquement le fond d'écran - faire une sorte de petit flash lumineux aux heures fixes (voire toutes les demi-heures) ...
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
texte opengl qui change de couleur [ par mondrone ]
J'ai un programme OpenGL (+ Glut sous DevCpp) qui suivant certaines touches doit afficher des phrases prédéfinies à l'écran avec g
Changer la couleur de la scrollbar d'une Edit Box ? [ par benland ]
Bon, ca va faire 2 jours que je me bat et je n'arrive toujours pas à colorer la scrollbar d'une Editbox, alors je m'en remet à ce Forum pour savoir s
De la couleur c mieux [ par tibob51 ]
<TD id=HB_Focus_Element vAlign=top width="100%" background="" height=250 UNSELECTAB
effacement automatique [ par dann3 ]
Je cherche à lancer au démarrage de Windows un fichier texte dans notepad(par exemple) jusque là je sais faire... mais comment faire disparaitre autom
Dégardé de couleur [ par julienbj ]
Je cherche à modifier l'apparence de mes progressbar. J'ai déja mes fonctions pour écrire du texte à l'intérieu... par sous c
Changer la couleur de fond d'une appli [ par Toutoun13 ]
Bonjour, J'ai créé une appli de base avec VC++. Par defaut le fond de la fenetre est blanc. Est il possible de modifier ce fond, j'aimerais
Transparence avec glBlend [ par smoove5198 ]
Bonjour, A l'aide d'un tutorial j'ai crée une classe qui affiche du texte sous opengl a partir d'une texture bmp listant tous les caracteres. D
Retourner à la ligne précédente et changer le couleur dans un cin . [ par Muner ]
Salut à tous .Je programme en C++ et j'aimerais savoir comment revenir une ligne auparevent, le code :cout << "\b" ;ne permet pas de passer
Recuperer la Couleur d'un Pixel dans une fenetre. [ par nomlingote ]
Bonjour à tous, Est il possible de connaitre la couleur d'un pixel dans une fenetre (dont on connait le handle ) ou sur l'ensemble de l'ecran. J'ai es
Couleur + OpenGL [ par norton ]
Bonjour, j'ai déssiné une scène 3d avec les textures . Jusque la aucun problème.Mais maintenant que j'affiche des particules dans
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
MATRICE TEMPLATEMATRICE TEMPLATE par hjr2610
Cliquez pour lire la suite par hjr2610 RE : SAC A DOS RE : SAC A DOS par hadjkaddour
Cliquez pour lire la suite par hadjkaddour
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|