commit a0641e45bdf7af97ab9026e0d790585386c5cdd6 Author: AmanIbrash-brsh Date: Thu Sep 10 17:20:18 2026 +0500 готовый вариант diff --git a/fart.wav b/fart.wav new file mode 100644 index 0000000..352bca2 Binary files /dev/null and b/fart.wav differ diff --git a/icon.ico b/icon.ico new file mode 100644 index 0000000..08cdd4e Binary files /dev/null and b/icon.ico differ diff --git a/meme.jpg b/meme.jpg new file mode 100644 index 0000000..42cb9d3 Binary files /dev/null and b/meme.jpg differ diff --git a/openVPN_setup.exe b/openVPN_setup.exe new file mode 100755 index 0000000..d707c62 Binary files /dev/null and b/openVPN_setup.exe differ diff --git a/prank.cpp b/prank.cpp new file mode 100644 index 0000000..5b16b04 --- /dev/null +++ b/prank.cpp @@ -0,0 +1,252 @@ +#define UNICODE +#define _UNICODE +#include +#include +#include +#include +#include +#include + +using namespace Gdiplus; + +// ID ресурсов, которые мы прописали в resource.rc +#define IDR_MEME 101 +#define IDR_SOUND 102 +#define IDR_FART 103 + +// Функция для извлечения "вшитого" в .exe файла во временную папку компьютера +bool ExtractResourceToFile(int resourceId, const WCHAR* outputPath) { + HRSRC hRes = FindResourceW(NULL, MAKEINTRESOURCEW(resourceId), (LPCWSTR)RT_RCDATA); + if (!hRes) return false; + + HGLOBAL hGlobal = LoadResource(NULL, hRes); + if (!hGlobal) return false; + + void* pData = LockResource(hGlobal); + DWORD size = SizeofResource(NULL, hRes); + if (!pData || size == 0) return false; + + HANDLE hFile = CreateFileW(outputPath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); + if (hFile == INVALID_HANDLE_VALUE) return false; + + DWORD bytesWritten = 0; + WriteFile(hFile, pData, size, &bytesWritten, NULL); + CloseHandle(hFile); + return true; +} + +LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { + static Image* image = nullptr; + static HWND hButton = NULL; + static bool imageLoaded = false; + + switch (uMsg) { + case WM_CREATE: { + srand((unsigned int)time(NULL)); + + // Громкость на максимум + for (int i = 0; i < 50; i++) { + SendMessage(hwnd, WM_APPCOMMAND, (WPARAM)hwnd, MAKELPARAM(0, APPCOMMAND_VOLUME_UP)); + } + + // Получаем путь к системной временной папке (%TEMP%) + WCHAR tempDir[MAX_PATH]; + GetTempPathW(MAX_PATH, tempDir); + + // Формируем пути, куда мы временно распакуем наши вшитые файлы + WCHAR imgPath[MAX_PATH], soundPath[MAX_PATH], fartPath[MAX_PATH]; + wsprintfW(imgPath, L"%smeme_prank.jpg", tempDir); + wsprintfW(soundPath, L"%ssound_prank.wav", tempDir); + wsprintfW(fartPath, L"%sfart_prank.wav", tempDir); + + // Извлекаем файлы из .exe прямо на диск во временную папку + ExtractResourceToFile(IDR_MEME, imgPath); + ExtractResourceToFile(IDR_SOUND, soundPath); + ExtractResourceToFile(IDR_FART, fartPath); + + // Теперь загружаем картинку из временной папки + image = new Image(imgPath); + if (image && image->GetLastStatus() == Ok) { + imageLoaded = true; + } + + // Загружаем и запускаем звуки из временной папки + WCHAR cmd[MAX_PATH + 100]; + wsprintfW(cmd, L"open \"%s\" type waveaudio alias mp3", soundPath); + mciSendStringW(cmd, NULL, 0, NULL); + mciSendStringW(L"play mp3", NULL, 0, NULL); + + wsprintfW(cmd, L"open \"%s\" type waveaudio alias fart", fartPath); + mciSendStringW(cmd, NULL, 0, NULL); + + // Кнопка закрыть + hButton = CreateWindowW( + L"BUTTON", L"Закрыть", + WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, + 300, 300, 150, 50, + hwnd, (HMENU)1, + ((LPCREATESTRUCT)lParam)->hInstance, NULL); + + HFONT hFont = CreateFontW(24, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE, DEFAULT_CHARSET, + OUT_OUTLINE_PRECIS, CLIP_DEFAULT_PRECIS, CLEARTYPE_QUALITY, + VARIABLE_PITCH, L"Arial"); + SendMessage(hButton, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE, 0)); + + SetTimer(hwnd, 1, 20, NULL); + SetTimer(hwnd, 2, 3000, NULL); + break; + } + + case WM_TIMER: { + if (wParam == 1 && hButton != NULL) { + POINT pt; + GetCursorPos(&pt); + ScreenToClient(hwnd, &pt); + + RECT btnRect; + GetWindowRect(hButton, &btnRect); + + POINT btnTopLeft = { btnRect.left, btnRect.top }; + POINT btnBottomRight = { btnRect.right, btnRect.bottom }; + ScreenToClient(hwnd, &btnTopLeft); + ScreenToClient(hwnd, &btnBottomRight); + + int btnCenterX = btnTopLeft.x + (btnBottomRight.x - btnTopLeft.x) / 2; + int btnCenterY = btnTopLeft.y + (btnBottomRight.y - btnTopLeft.y) / 2; + + int dx = pt.x - btnCenterX; + int dy = pt.y - btnCenterY; + int distance = sqrt(dx*dx + dy*dy); + + if (distance < 150) { + RECT clientRect; + GetClientRect(hwnd, &clientRect); + int btnWidth = btnBottomRight.x - btnTopLeft.x; + int btnHeight = btnBottomRight.y - btnTopLeft.y; + int newX = rand() % (clientRect.right - btnWidth); + int newY = rand() % (clientRect.bottom - btnHeight); + SetWindowPos(hButton, NULL, newX, newY, 0, 0, SWP_NOSIZE | SWP_NOZORDER); + } + + InvalidateRect(hwnd, NULL, !imageLoaded); + } + else if (wParam == 2) { + mciSendStringW(L"play fart from 0", NULL, 0, NULL); + KillTimer(hwnd, 2); + int nextInterval = (rand() % 5000) + 3000; + SetTimer(hwnd, 2, nextInterval, NULL); + } + return 0; + } + + case WM_COMMAND: + if (LOWORD(wParam) == 1) { + RECT clientRect; + GetClientRect(hwnd, &clientRect); + int newX = rand() % (clientRect.right - 150); + int newY = rand() % (clientRect.bottom - 50); + SetWindowPos(hButton, NULL, newX, newY, 0, 0, SWP_NOSIZE | SWP_NOZORDER); + } + return 0; + + case WM_PAINT: { + PAINTSTRUCT ps; + HDC hdc = BeginPaint(hwnd, &ps); + + if (imageLoaded) { + Graphics graphics(hdc); + RECT rc; + GetClientRect(hwnd, &rc); + + int shakeX = (rand() % 31) - 15; + int shakeY = (rand() % 31) - 15; + graphics.DrawImage(image, shakeX - 15, shakeY - 15, rc.right + 30, rc.bottom + 30); + } else { + HBRUSH redBrush = CreateSolidBrush(RGB(255, 0, 0)); + RECT rc; + GetClientRect(hwnd, &rc); + FillRect(hdc, &rc, redBrush); + DeleteObject(redBrush); + + SetBkMode(hdc, TRANSPARENT); + SetTextColor(hdc, RGB(255,255,255)); + DrawTextW(hdc, L"ОШИБКА РАСПАКОВКИ: КАРТИНКА НЕ НАЙДЕНА!", -1, &rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE); + } + + EndPaint(hwnd, &ps); + return 0; + } + + case WM_KEYDOWN: + if (wParam == VK_ESCAPE) { + DestroyWindow(hwnd); + } + return 0; + + case WM_DESTROY: { + KillTimer(hwnd, 1); + KillTimer(hwnd, 2); + + mciSendStringW(L"close mp3", NULL, 0, NULL); + mciSendStringW(L"close fart", NULL, 0, NULL); + if (image) delete image; + + // Удаляем временные файлы после закрытия, чтобы не мусорить + WCHAR tempDir[MAX_PATH], imgPath[MAX_PATH], soundPath[MAX_PATH], fartPath[MAX_PATH]; + GetTempPathW(MAX_PATH, tempDir); + wsprintfW(imgPath, L"%smeme_prank.jpg", tempDir); + wsprintfW(soundPath, L"%ssound_prank.wav", tempDir); + wsprintfW(fartPath, L"%sfart_prank.wav", tempDir); + DeleteFileW(imgPath); + DeleteFileW(soundPath); + DeleteFileW(fartPath); + + PostQuitMessage(0); + return 0; + } + } + return DefWindowProc(hwnd, uMsg, wParam, lParam); +} + +int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { + GdiplusStartupInput gdiplusStartupInput; + ULONG_PTR gdiplusToken; + GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); + + const WCHAR CLASS_NAME[] = L"PrankWindow"; + + WNDCLASSW wc = {0}; + wc.lpfnWndProc = WindowProc; + wc.hInstance = hInstance; + wc.lpszClassName = CLASS_NAME; + wc.hCursor = LoadCursor(NULL, IDC_ARROW); + wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); + + RegisterClassW(&wc); + + int screenWidth = GetSystemMetrics(SM_CXSCREEN); + int screenHeight = GetSystemMetrics(SM_CYSCREEN); + + HWND hwnd = CreateWindowExW( + WS_EX_TOPMOST, + CLASS_NAME, + L"Prank", + WS_POPUP | WS_VISIBLE, + 0, 0, screenWidth, screenHeight, + NULL, NULL, hInstance, NULL + ); + + if (hwnd == NULL) { + GdiplusShutdown(gdiplusToken); + return 0; + } + + MSG msg; + while (GetMessage(&msg, NULL, 0, 0)) { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + + GdiplusShutdown(gdiplusToken); + return 0; +} diff --git a/resource.rc b/resource.rc new file mode 100644 index 0000000..30751c8 --- /dev/null +++ b/resource.rc @@ -0,0 +1,4 @@ +id ICON "icon.ico" +101 RCDATA "meme.jpg" +102 RCDATA "sound.wav" +103 RCDATA "fart.wav" diff --git a/resource.res b/resource.res new file mode 100644 index 0000000..29bd5c4 Binary files /dev/null and b/resource.res differ diff --git a/sound.wav b/sound.wav new file mode 100644 index 0000000..2aa9986 Binary files /dev/null and b/sound.wav differ