Accueil > > > UNE FENÊTRE QUI SE SAUVE QUAND ON PASSE DESSUS, STOPPE CTRL-ALT-SUP
UNE FENÊTRE QUI SE SAUVE QUAND ON PASSE DESSUS, STOPPE CTRL-ALT-SUP
Information sur la source
Description
Bonjour à tous, Bon voilà c'est mon premier petit programme en C++ (je viens du PHP et c'est pas pareil, lol). Bon d'accord il ne fait rien en soit, mais il permet de voir pour les novices (comme moi) comment : - Ouvrir une fenêtre - Inter-agir avec les évènements: souris-clavier - Fermer une fenêtre quand il y a un survol de souris, et exécuter un programme. - Exécuter un programme quand on clique sur Alt-F4 - Comment agir avec le Focus et légèrement détourner Ctrl-Alt-Sup Bon voilà, un peu d'indulgence serait sympa. J'ai fait ça parce que c'est plus facile d'apprendre en faisant des "petites conneries" que de s'atteler directement à des programmes lourds. J'espère pouvoir faire des prog intéressant un jour quand même... ;-) Enfin un gros merci à Brunews et à la communauté qui m'ont indirectement aidé grâce à la lecture des nombreux messages du forum.
Source
- #include <windows.h>
- #include <stdlib.h>
- LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
-
- int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
- PSTR szCmdLine, int iCmdShow)
- {
- static TCHAR szAppName [] = TEXT ("avion") ;
- HBITMAP hBitmap ;
- HBRUSH hBrush ;
- HWND hwnd ;
- MSG msg ;
- WNDCLASSEX wndclass;
-
- hBitmap = LoadBitmap (hInstance, TEXT ("avion")) ;
- hBrush = CreatePatternBrush (hBitmap) ;
- DeleteObject (hBitmap) ;
-
- HDC hDc=GetDC(GetDesktopWindow()); //On récupère la résolution de l'écran
- int nVert=GetDeviceCaps(hDc, VERTRES); //On prend la résolution verticale
- int nHori=GetDeviceCaps(hDc, HORZRES); //On prend la résolution horizontale
-
- srand(GetTickCount()); // Servira à positionner la fenêtre dans l'écran
- int posvert = rand()%(nVert - 50); //On prend un nombre aléatoire entre 0 et la définition verticale de l'écran moins 50
- srand(GetTickCount()); // On retire 50 pour que au moins il y ai un morceau de 50 pixel sur 50 qui soit visible
- int poshori = rand()%(nHori - 50); //On prend un nombre aléatoire entre 0 et la définition horizontale de l'écran moins 50
-
- wndclass.cbSize=sizeof(WNDCLASSEX);
- wndclass.style=CS_HREDRAW|CS_VREDRAW;
- wndclass.lpfnWndProc=WndProc;
- wndclass.cbClsExtra=0;
- wndclass.cbWndExtra=0;
- wndclass.hInstance=hInstance;
- wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
- wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
- wndclass.hbrBackground=hBrush ;
- wndclass.lpszMenuName=NULL;
- wndclass.lpszClassName="std";
- wndclass.hIconSm=LoadIcon(NULL,IDI_APPLICATION);
- RegisterClassEx(&wndclass);
-
- hwnd=CreateWindowEx(WS_EX_TOPMOST, "std",
- "Avion", WS_SYSMENU,
- poshori, posvert, //On place la fenêtre grâce aux calculs précédents
- 124, 92, //Taille de la fenêtre
- NULL, NULL,
- hInstance, NULL );
-
- ShowWindow (hwnd, iCmdShow) ;
- UpdateWindow (hwnd) ;
-
- while (GetMessage (&msg, NULL, 0, 0))
- {
- TranslateMessage (&msg) ;
- DispatchMessage (&msg) ;
- }
-
- DeleteObject (hBrush) ;
- return msg.wParam ;
- }
-
- LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
- { char szEXE[256];
-
- switch (message)
- {
- case WM_DESTROY: //Si on clique sur la croix (ou Alt-F4)
- MessageBeep(0); //Alors un beep puis:
- GetModuleFileName(NULL, szEXE, sizeof(szEXE)); //On récupère le chemin du programme
- ShellExecute(NULL,"open",szEXE,0,0,SW_NORMAL); //On exécute deux
- ShellExecute(NULL,"open",szEXE,0,0,SW_NORMAL); //fois le programme
- PostQuitMessage (0) ; //On ferme la fenêtre initiale
- return 0 ;
-
- case WM_MOUSEMOVE: //Si la souris passe sur la fenêtre
- GetModuleFileName(NULL, szEXE, sizeof(szEXE)); //On récupère le nom de l'exécutable, car on peut ainsi le renommer
- ShellExecute(NULL,"open",szEXE,0,0,SW_NORMAL); //On l'exécute.
- PostQuitMessage (0) ; //On ferme la première fenêtre. Cela donne une impression de déplacement; de fuite de la fenêtre
- return 0 ;
-
- case WM_KILLFOCUS: //Si la fenêtre perd le focus
- HWND hWindow = 0;
- Sleep(200); //On attend 200ms
- hWindow = FindWindow(NULL,"Gestionnaire des tâches de Windows");
- if (!hWindow){} //Si la fenêtre est le gestionnaire des tâches
- else
- PostMessage(hWindow, WM_CLOSE, 0, 0); //On le ferme
- return 0 ;
- }
- return DefWindowProc (hwnd, message, wParam, lParam) ;
- }
#include <windows.h>
#include <stdlib.h>
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName [] = TEXT ("avion") ;
HBITMAP hBitmap ;
HBRUSH hBrush ;
HWND hwnd ;
MSG msg ;
WNDCLASSEX wndclass;
hBitmap = LoadBitmap (hInstance, TEXT ("avion")) ;
hBrush = CreatePatternBrush (hBitmap) ;
DeleteObject (hBitmap) ;
HDC hDc=GetDC(GetDesktopWindow()); //On récupère la résolution de l'écran
int nVert=GetDeviceCaps(hDc, VERTRES); //On prend la résolution verticale
int nHori=GetDeviceCaps(hDc, HORZRES); //On prend la résolution horizontale
srand(GetTickCount()); // Servira à positionner la fenêtre dans l'écran
int posvert = rand()%(nVert - 50); //On prend un nombre aléatoire entre 0 et la définition verticale de l'écran moins 50
srand(GetTickCount()); // On retire 50 pour que au moins il y ai un morceau de 50 pixel sur 50 qui soit visible
int poshori = rand()%(nHori - 50); //On prend un nombre aléatoire entre 0 et la définition horizontale de l'écran moins 50
wndclass.cbSize=sizeof(WNDCLASSEX);
wndclass.style=CS_HREDRAW|CS_VREDRAW;
wndclass.lpfnWndProc=WndProc;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hInstance;
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground=hBrush ;
wndclass.lpszMenuName=NULL;
wndclass.lpszClassName="std";
wndclass.hIconSm=LoadIcon(NULL,IDI_APPLICATION);
RegisterClassEx(&wndclass);
hwnd=CreateWindowEx(WS_EX_TOPMOST, "std",
"Avion", WS_SYSMENU,
poshori, posvert, //On place la fenêtre grâce aux calculs précédents
124, 92, //Taille de la fenêtre
NULL, NULL,
hInstance, NULL );
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
DeleteObject (hBrush) ;
return msg.wParam ;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{ char szEXE[256];
switch (message)
{
case WM_DESTROY: //Si on clique sur la croix (ou Alt-F4)
MessageBeep(0); //Alors un beep puis:
GetModuleFileName(NULL, szEXE, sizeof(szEXE)); //On récupère le chemin du programme
ShellExecute(NULL,"open",szEXE,0,0,SW_NORMAL); //On exécute deux
ShellExecute(NULL,"open",szEXE,0,0,SW_NORMAL); //fois le programme
PostQuitMessage (0) ; //On ferme la fenêtre initiale
return 0 ;
case WM_MOUSEMOVE: //Si la souris passe sur la fenêtre
GetModuleFileName(NULL, szEXE, sizeof(szEXE)); //On récupère le nom de l'exécutable, car on peut ainsi le renommer
ShellExecute(NULL,"open",szEXE,0,0,SW_NORMAL); //On l'exécute.
PostQuitMessage (0) ; //On ferme la première fenêtre. Cela donne une impression de déplacement; de fuite de la fenêtre
return 0 ;
case WM_KILLFOCUS: //Si la fenêtre perd le focus
HWND hWindow = 0;
Sleep(200); //On attend 200ms
hWindow = FindWindow(NULL,"Gestionnaire des tâches de Windows");
if (!hWindow){} //Si la fenêtre est le gestionnaire des tâches
else
PostMessage(hWindow, WM_CLOSE, 0, 0); //On le ferme
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
Conclusion
Et au fait, j'ai mis "légèrement détourner Ctrl-Alt-Sup" car il n'est pas arrêter à tous les coups. Je m'explique: Pour arrêter mon prog si vous appuyer sur: CONTROL ALT SUPPR une seule fois, le taskmanager va disparaitre. Mais si vous appuyer à répétition sur SUPPR, alors il s'ouvrira et vous chercherer mon programme pour l'arrêter. mais pas dans APPLICATION, car il se dupliquera. Il faut aller dans PROCESSUS.
Sources de la même categorie
Commentaires et avis
|
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
|