Skip to content

Commit 4a07f5c

Browse files
authored
Optimalizace a zjednodušení kódu
Menší využití paměti (reference v printColoredText), méně kódu (srand jen jednou, skombinované funkce) a celkové jeho zpřehlednění
1 parent cdd59aa commit 4a07f5c

File tree

2 files changed

+147
-24
lines changed

2 files changed

+147
-24
lines changed

lyoUtil.h

+124
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
#pragma once
2+
3+
#include <iostream>
4+
#include <string>
5+
#include <vector>
6+
#include <locale>
7+
#include <limits>
8+
#include <Windows.h>
9+
#include <time.h>
10+
11+
using namespace std;
12+
13+
// Promìnné
14+
wstring wts;
15+
int delay = 30;
16+
int inbDelay = 0;
17+
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
18+
19+
20+
21+
void sendText() {
22+
23+
INPUT enter;
24+
enter.ki.wVk = 0x0D;
25+
enter.type = INPUT_KEYBOARD;
26+
enter.ki.dwFlags = 0;
27+
28+
for (int i = 0; i < wts.length(); i++) {
29+
30+
HKL myKL = GetKeyboardLayout(0);
31+
SHORT scan = VkKeyScanExW(wts[i], myKL);
32+
33+
INPUT shift;
34+
shift.ki.wVk = 0x10;
35+
shift.type = INPUT_KEYBOARD;
36+
shift.ki.dwFlags = 0;
37+
38+
INPUT alt;
39+
alt.ki.wVk = 0x12;
40+
alt.type = INPUT_KEYBOARD;
41+
alt.ki.dwFlags = 0;
42+
43+
INPUT input;
44+
input.ki.wVk = scan;
45+
input.type = INPUT_KEYBOARD;
46+
input.ki.dwFlags = 0;
47+
48+
if (scan & 0x100) { SendInput(1, &shift, sizeof(INPUT)); }
49+
50+
if (scan & 0x200) { SendInput(1, &alt, sizeof(INPUT)); }
51+
52+
SendInput(1, &input, sizeof(INPUT));
53+
54+
input.ki.dwFlags = KEYEVENTF_KEYUP;
55+
shift.ki.dwFlags = KEYEVENTF_KEYUP;
56+
alt.ki.dwFlags = KEYEVENTF_KEYUP;
57+
58+
Sleep(inbDelay);
59+
SendInput(1, &input, sizeof(INPUT));
60+
Sleep(inbDelay);
61+
SendInput(1, &shift, sizeof(INPUT));
62+
Sleep(inbDelay);
63+
SendInput(1, &alt, sizeof(INPUT));
64+
65+
}
66+
67+
SendInput(1, &enter, sizeof(INPUT));
68+
enter.ki.dwFlags = KEYEVENTF_KEYUP;
69+
Sleep(inbDelay);
70+
SendInput(1, &enter, sizeof(INPUT));
71+
72+
Sleep(delay);
73+
}
74+
75+
void flushCin() {
76+
77+
cin.clear();
78+
cin.ignore(numeric_limits<streamsize>::max(), '\n');
79+
}
80+
81+
void setColor(WORD msgColor) {
82+
83+
SetConsoleTextAttribute(hConsole, msgColor); // Jen v cmd prostøedí!
84+
}
85+
86+
87+
void printColoredMsg(bool isRainbow, int clrBase, string msg, WORD nextColor) {
88+
89+
// isRainbow - Má to být duhové?
90+
// clrBase - V pøípadì jednobarevného urèuje barvu, v pøípadì duhového urèuje základnu
91+
// msg - Co bude zbarvené a cout-ované?
92+
// nextColor - Jaká barva bude nastavena po dokonèení?
93+
94+
if (isRainbow == true) {
95+
int clr = clrBase;
96+
97+
for (int i = 0; i < msg.length(); i++) {
98+
99+
SetConsoleTextAttribute(hConsole, clr);
100+
clr++;
101+
102+
if (clr > clrBase + 5) {
103+
104+
clr = clrBase;
105+
}
106+
107+
cout << msg[i];
108+
}
109+
}
110+
else {
111+
112+
SetConsoleTextAttribute(hConsole, clrBase);
113+
cout << msg;
114+
}
115+
SetConsoleTextAttribute(hConsole, nextColor);
116+
}
117+
118+
template<typename T>
119+
T chooseRandElem(vector<T> &arr) {
120+
121+
int randIndex = rand() % arr.size();
122+
123+
return arr[randIndex];
124+
}

spam.cpp

+23-24
Original file line numberDiff line numberDiff line change
@@ -1,99 +1,98 @@
11
#define NOMINMAX
22
#define SUCCESS 10
3-
#define USERINPUT 11
43
#define FAILURE 12
4+
#define USERINPUT 11
55
#define WHITE 15
66

7-
#include <iostream>
8-
#include <string>
9-
#include <locale>
10-
#include <limits>
11-
#include <Windows.h>
12-
#include "spam.h"
7+
#include "lyoUtil.h"
138

149
using namespace std;
1510

1611
int main() {
1712

13+
// Seed pro rand()
14+
srand((unsigned int)time(NULL));
15+
1816
// Proměnné a jejich základní hodnoty
1917
string ans;
2018
UINT codepage = 1250;
2119
string sLocale = "cs_CZ";
22-
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
2320
delay = 30;
2421

25-
22+
// Vektory
23+
vector<string> splashText = { "Le fishe au chocolat.", "Napajedla neexistují.", "Praise Gabča.", "30x rychlejší než Python.", "Garance špagetového kódu.", "Schváleno Kuncišem.", "Směřujte spam na lyorig#0775.", "Isn't it?", "Nenávidím tento jazyk.", "Pořád stabilnější než Fallout 76.", "Kvůli tomuto mám dvojku z biologie.", "Spam! není spam."};
24+
vector<string> titleText = { "Audavillage", "Videomath", "paint.com", "Imagine 2", "Paint 4D", "XboxDiagram", "C++Charm", "Kyberdigi.cz", "Craftmine", "Toto !== virus" }; // UTF-8
2625

2726
// Základní nastavení
28-
SetConsoleTitleW(chooseRandElem(titleText).c_str());
27+
SetConsoleTitleA(chooseRandElem(titleText).c_str());
2928
setlocale(LC_ALL, "cs_CZ");
3029
SetConsoleCP(1250);
3130

3231
setColor(WHITE);
32+
3333
cout << "(c) Petr Šácha 2022. ";
34-
printRainbowMsg(9, chooseRandElem(splashText), WHITE);
34+
printColoredMsg(false, USERINPUT, chooseRandElem(splashText), WHITE);
3535
cout << "\nPoužitím či modifikací programu souhlasíte se samostatností Míkovic.\n\n";
36-
printColoredMsg(WHITE, "Chcete upravit nastavení? (ano/ne): ", USERINPUT);
36+
printColoredMsg(false, WHITE, "Chcete upravit nastavení? (ano/ne): ", USERINPUT);
3737
cin >> ans;
3838

3939

4040

4141

4242
// Goto je giga cringe ale jsem líný programátor
43-
4443
if (ans == "ano") {
4544

4645
Q1A:
47-
printColoredMsg(WHITE, "\nProdleva mezi repeticemi (ms): ", USERINPUT);
46+
printColoredMsg(false, WHITE, "\nProdleva mezi repeticemi (ms): ", USERINPUT);
4847
cin >> delay;
4948

5049
if (!cin || delay < 0 || delay > 10000) {
5150

51+
printColoredMsg(false, FAILURE, "Neplatná prodleva. Zadejte jinou.\n", WHITE);
5252
flushCin();
53-
printColoredMsg(FAILURE, "Neplatná prodleva. Zadejte jinou.\n", WHITE);
5453
goto Q1A;
5554
}
5655

5756

5857

5958
Q1B:
60-
printColoredMsg(WHITE, "\nProdleva mezi stiskem a odesláním klávesy (ms): ", USERINPUT);
59+
printColoredMsg(false, WHITE, "\nProdleva mezi stiskem a odesláním klávesy (ms): ", USERINPUT);
6160
cin >> inbDelay;
6261

6362
if (!cin || inbDelay < 0 || inbDelay > 1000) {
6463

64+
printColoredMsg(false, FAILURE, "Neplatná prodleva. Zadejte jinou.\n", WHITE);
6565
flushCin();
66-
printColoredMsg(FAILURE, "Neplatná prodleva. Zadejte jinou.\n", WHITE);
6766
goto Q1B;
6867
}
6968

7069

7170

7271
Q2:
73-
printColoredMsg(WHITE, "\nCodepage: ", USERINPUT);
72+
printColoredMsg(false, WHITE, "\nCodepage: ", USERINPUT);
7473
cin >> codepage;
7574

7675
if (!cin || codepage > 1500) {
7776

77+
printColoredMsg(false, FAILURE, "Neplatný codepage. Zadejte jiný.\n", WHITE);
7878
flushCin();
79-
printColoredMsg(FAILURE, "Neplatný codepage. Zadejte jiný.\n", WHITE);
8079
goto Q2;
8180
}
8281

8382

8483

8584
Q3:
86-
printColoredMsg(WHITE, "\nLocale: ", USERINPUT);
85+
printColoredMsg(false, WHITE, "\nLocale: ", USERINPUT);
8786
cin >> sLocale;
8887

8988
if (!cin || sLocale.length() < 4 || sLocale.length() > 10) { // Locale může být i 10 znaků dlouhý, tak pro jistotu
9089

90+
printColoredMsg(false, FAILURE, "Neplatný locale. Zadejte jiný.\n", WHITE);
9191
flushCin();
92-
printColoredMsg(FAILURE, "Neplatný locale. Zadejte jiný.\n", WHITE);
9392
goto Q3;
9493
}
9594

96-
printColoredMsg(SUCCESS, "\nNastaveno.\n", WHITE); // Lež! Pøece to bude nastaveno až o nìkolik øádkù pozdìji
95+
printColoredMsg(false, SUCCESS, "\nNastaveno.\n", WHITE); // Lež! Přece to bude nastaveno až o několik řádků později
9796
}
9897

9998

@@ -111,12 +110,12 @@ int main() {
111110
setlocale(LC_ALL, sLocale.c_str());
112111
SetConsoleCP(codepage);
113112

114-
printColoredMsg(WHITE, "\nCo chcete spamovat? -> ", USERINPUT);
113+
printColoredMsg(false, WHITE, "\nCo chcete spamovat? -> ", USERINPUT);
115114

116115
flushCin();
117116
getline(wcin, wts);
118117

119-
printColoredMsg(SUCCESS, "\nPøipraveno. Držte F12 pro spam.", WHITE);
118+
printColoredMsg(false, SUCCESS, "\nPřipraveno. Držte F12 pro spam.", WHITE);
120119

121120

122121

0 commit comments

Comments
 (0)