-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.cpp
More file actions
133 lines (112 loc) · 4.52 KB
/
main.cpp
File metadata and controls
133 lines (112 loc) · 4.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#include <windows.h>
#include <iostream>
#include <random>
// دالة لعرض نوافذ الرسائل
void showMessageBox(int count) {
int screenWidth = GetSystemMetrics(SM_CXSCREEN); // عرض الشاشة
int screenHeight = GetSystemMetrics(SM_CYSCREEN); // ارتفاع الشاشة
std::random_device rd; // إنشاء مولد أرقام عشوائية
std::mt19937 gen(rd());
std::uniform_int_distribution<> distribX(0, screenWidth - 300); // توزيع عشوائي لموقع النوافذ (عرض)
std::uniform_int_distribution<> distribY(0, screenHeight - 150); // توزيع عشوائي لموقع النوافذ (ارتفاع)
for (int i = 0; i < count; ++i) {
int x = distribX(gen); // موقع عشوائي على المحور X
int y = distribY(gen); // موقع عشوائي على المحور Y
// إنشاء نافذة رسالة
HWND hwnd = CreateWindowExA(
WS_EX_TOOLWINDOW, // نمط النافذة (لا تظهر في شريط المهام)
"STATIC",
"The program is working without problems. You can exit it from the Task Manager.",
WS_POPUP | WS_VISIBLE, // نمط النافذة (بدون إطار)
x, y, 800, 800, NULL, NULL, NULL, NULL
);
// تعيين عنوان النافذة
SetWindowTextA(hwnd, "I Love M3soop");
// تهيئة هيكل LOGFONTA
LOGFONTA logFont = {0}; // تهيئة الهيكل بالقيم الافتراضية
logFont.lfHeight = 48; // حجم الخط
logFont.lfWeight = FW_BOLD; // سمك الخط (عريض)
logFont.lfCharSet = DEFAULT_CHARSET; // مجموعة الأحرف
strcpy(logFont.lfFaceName, "Arial"); // اسم الخط
// إنشاء الخط بناءً على logFont
HFONT hFont = CreateFontIndirectA(&logFont);
if (hFont == NULL) {
MessageBoxA(NULL, "Failed to create font!", "Error", MB_ICONERROR);
return;
}
// إرسال الخط إلى النافذة
SendMessage(hwnd, WM_SETFONT, (WPARAM)hFont, TRUE);
// الحصول على جهاز السياق (HDC) للنافذة
HDC hdc = GetDC(hwnd);
// ضبط لون النص والخلفية
SetTextColor(hdc, RGB(255, 255, 255)); // لون النص أبيض
SetBkColor(hdc, RGB(0, 0, 0)); // لون الخلفية أسود
// رسم النص في المنتصف
RECT rect;
GetClientRect(hwnd, &rect);
DrawTextA(hdc, "I Love M3soop", -1, &rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
// تحرير جهاز السياق
ReleaseDC(hwnd, hdc);
Sleep(1000); // انتظر ثانية واحدة بين كل نافذة
}
}
// دالة لإخفاء نافذة الكونسول
void detachFromConsole() {
HWND hwnd = GetConsoleWindow();
ShowWindow(hwnd, SW_HIDE); // إخفاء نافذة الكونسول
FreeConsole(); // تحرير الكونسول
}
// دالة معالجة رسائل النافذة
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
static int count = 1; // متغير لتخزين عدد النوافذ
switch (msg) {
case WM_CLOSE: {
// زيادة العدد فقط عند النقر على زر الإغلاق "X"
count *= 2; // تضاعف عدد النوافذ
DestroyWindow(hwnd); // تدمير النافذة
break;
}
case WM_DESTROY:
PostQuitMessage(0); // إنهاء البرنامج عند تدمير النافذة
break;
default:
return DefWindowProc(hwnd, msg, wParam, lParam); // معالجة الرسائل الأخرى بشكل افتراضي
}
return 0;
}
// الدالة الرئيسية
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
detachFromConsole(); // إخفاء نافذة الكونسول
// تسجيل فئة النافذة
WNDCLASSA wc = {0};
wc.lpfnWndProc = WndProc; // تعيين دالة معالجة الرسائل
wc.hInstance = hInstance;
wc.lpszClassName = "MyAppClass"; // اسم فئة النافذة
if (!RegisterClassA(&wc)) {
MessageBoxA(NULL, "Failed to register window class!", "Error", MB_ICONERROR); // رسالة خطأ إذا فشل التسجيل
return 1;
}
// إنشاء نافذة خفية
HWND hwnd = CreateWindowExA(
WS_EX_TOOLWINDOW, // نمط النافذة (لا تظهر في شريط المهام)
"MyAppClass",
"MyApp",
WS_POPUP | WS_VISIBLE, // نمط النافذة (بدون إطار)
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL
);
if (!hwnd) {
MessageBoxA(NULL, "Failed to create window!", "Error", MB_ICONERROR); // رسالة خطأ إذا فشل إنشاء النافذة
return 1;
}
ShowWindow(hwnd, SW_SHOW); // إظهار النافذة
// عرض نوافذ الرسائل
showMessageBox(1); // يعرض نافذة واحدة في البداية
// حلقة الرسائل الرئيسية
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}