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
INTéGRATION YAMMER ET SHAREPOINT ONLINE (OFFICE 365), éTAPE 1 .INTéGRATION YAMMER ET SHAREPOINT ONLINE (OFFICE 365), éTAPE 1 . par Patrick Guimonet
#Yammer Certains s'en sont déjà fait l'écho (ici en allemand par exemple : Yammer Integration in Office 365 Phase 1) ou bien sûr sur le blog SharePoint : Make Yammer your default social network in Office 365 en anglais. Mais c'e...
Cliquez pour lire la suite de l'article par Patrick Guimonet [DYNAMICS CRM] AJOUTER LES DOSSIERS DE CRM AU DOSSIER FAVORIS D'OUTLOOK[DYNAMICS CRM] AJOUTER LES DOSSIERS DE CRM AU DOSSIER FAVORIS D'OUTLOOK par bianca
Objectif
Pour aller plus rapidement dans les menus de Dynamics CRM depuis votre client CRM pour Outlook, vous pouvez utiliser le dossier des Favoris d'Outlook. En effet, par simple glisser/déplacer, vous pouvez déposer un éléme...
Cliquez pour lire la suite de l'article par bianca VISUAL STUDIO 2013VISUAL STUDIO 2013 par Etienne Margraff
Ahh, ENFIN ! c'est officiel, il va y avoir un VS et un TFS 2013. De nouvelles fonctionnalités qui vont à mon sens assoir la maturité de TFS qui est maintenant l'outil incontournable pour tout projet (.NET, mais pas seulement !). Si vous n'avez pas jet...
Cliquez pour lire la suite de l'article par Etienne Margraff CONFIGURER LA COLLATION SQL SERVER POUR SHAREPOINT CONFIGURER LA COLLATION SQL SERVER POUR SHAREPOINT par JeremyJeanson
Note : Je poste cet article à titre de pense-bête. Cela fait des années que je me trimballe avec une capture d'écran, car je ne me rappel jamais comment choisir la collation d'un SQL Server pour SharePoint. Pour SharePoint, il est conseillé de choisir la ...
Cliquez pour lire la suite de l'article par JeremyJeanson ETENDRE LE TEAM WEB ACCESS DE TFS 2012 - STEP 1: CRéATION DU PLUGINETENDRE LE TEAM WEB ACCESS DE TFS 2012 - STEP 1: CRéATION DU PLUGIN par Philess
Dans cet article nous allons créer un plugin installable sur le Team Web Access qui s'intègrera dans l'architecture du site et se chargera au moment où on le décidera.
Avant de lire ce billet et si cela n'est pas encore fait j...
Cliquez pour lire la suite de l'article par Philess
Logiciels
Nego Facturation (1.85)NEGO FACTURATION (1.85)Nego Facturation est un logiciel complet qui permet de gérer vos factures et devis très simplemen... Cliquez pour télécharger Nego Facturation Devis-Factures PHMSD (2.2.0.1)DEVIS-FACTURES PHMSD (2.2.0.1)Configuration minimale
Nécessite Windows™ 2000, XP, Windows 7, 8, Vista (Service Pack à... Cliquez pour télécharger Devis-Factures PHMSD WDmemoCode (2.0.0.1)WDMEMOCODE (2.0.0.1)WDmemoCode a été conçu pour aider les développeurs Windev à créer/compléter et conserver une base... Cliquez pour télécharger WDmemoCode ProtoMedic (4.0.0.11)PROTOMEDIC (4.0.0.11)ProtoMedic est un logiciel destiné principalement aux médecins généralistes.
ProtoMedic permet d... Cliquez pour télécharger ProtoMedic MyCurriculum 2011 (7.4.1.12)MYCURRICULUM 2011 (7.4.1.12)Rédigez votre Curriculum Vitae mais également ceux de votre famille ou de vos amis très facilemen... Cliquez pour télécharger MyCurriculum 2011
|