Comment faire du gruyère de vos fenêtres en api win32

Soyez le premier à donner votre avis sur cette source.

Vue 7 508 fois - Téléchargée 712 fois

Description

Un petit prog qui mange vos fenêtres petit à petit :)
Ne vous inquiétez pas, ce n'est pas un virus et ça ne détruit en rien vos données. Il fait juste des trous à vos fenêtres, comme du gruyère.

ATTENTION : âmes sensible s'abstenir! Si vous possedez win9x et que vous n'avez aucun accès aux processus, il ne vous restera qu'un moyen pour arrêter ce programme une fois lancé : rebooter!
NOTE que je ne devrais pas à avoir à écrire : ce programme est JUSTE pour montrer ce que l'on peut faire avec les API de windows! Ne vous en servez pas pour faire des plaisanteries autour de vous!
Vous êtes prévenu et je vous considère suffisamment responsable.

Je met le code ici, mais vous le trouverez aussi dans le zip.

Source / Exemple :


//**Dev par KPTN**

#include <windows.h>
#include <stdlib.h>
#include <time.h>

VOID CALLBACK TimeProc(
  HWND hwnd,         // handle to window
  UINT uMsg,         // WM_TIMER message
  UINT_PTR idEvent,  // timer identifier
  DWORD dwTime       // current system time
);

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
	//Génération d'une suite pseudo aléatoire
	srand( (unsigned)time( NULL ) );

	//Initialisation du timer et de l'appli
	SetTimer(NULL, NULL, 10, (TIMERPROC)TimeProc);
       	WNDCLASS lpWndClass;
	lpWndClass.lpfnWndProc = NULL;
	lpWndClass.hInstance = hInstance;
	RegisterClass(&lpWndClass);
	MSG msg;
	BOOL bRet;

	//Récupération des messages
	while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
	{
	  if (bRet != -1)
	  {
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	  }
	}
	return 0;
}

VOID CALLBACK TimeProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
HWND hWnd2;
int w, h;
int nTaille, nX, nY;
RECT r;
	
	//Récupération de la fenêtre avant
	hWnd2 = GetForegroundWindow();
	//Récupération de la taille de la fenêtre
       GetWindowRect(hWnd2, &r);

	//Détermination de la taille et lieu des trous
       nTaille = ((double)rand()/RAND_MAX) * (100);
       nX = ((double)rand()/RAND_MAX) * (r.right-r.left);
       nY = ((double)rand()/RAND_MAX) * (r.bottom-r.top);

	//Récupération de la région existante
       HRGN Region = CreateRectRgn(0,0,0,0);
       int nRgnType = GetWindowRgn( hWnd2, Region );
       switch (nRgnType) {
           case NULLREGION :
           case ERROR :
              Region = CreateRectRgn(0, 0, r.right-r.left, r.bottom-r.top);
              break;
           case SIMPLEREGION :
           case COMPLEXREGION :
           default :
               break;
       }
	//Création du trou
       HRGN SubRegion = CreateEllipticRgn(nX, nY, nX+nTaille, nY+nTaille);
       CombineRgn(Region,Region,SubRegion,RGN_DIFF);

	//Mise à jour de la région de la fenêtre
       SetWindowRgn(hWnd2,Region,true);

	//Libération des objets
       DeleteObject(SubRegion);

}

Conclusion :


Ce code est sous VC++ 6 mais peut tout aussi bien tourner sous n'importe quel compilateur.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
4
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
8 mars 2007

Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
22
A peine le temps de flipper ... Et tout a déjà presque disparu. Faut connaître le truc pour avoir le temps de killer tout çà.
Joliment fait en tous cas.
Messages postés
328
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
8 mars 2007

Oh my god !!! C'est dur a fermer le process :P Tres bon code pour faire paniquer quelqu'un...
Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
6 avril 2008
1
Wao c'est vrai pour arréter le processus c'est pas facile !!

Merci pour ta source
Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
2
ouaip C comme ca que j'avais fait, sinon C reboot obligé pour ceux qui connaissent pas le crtaltsuppr ;)
Afficher les 9 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.