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.
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.