Skip to content

Commit 0111cd7

Browse files
authored
Add files via upload
1 parent 0a100e5 commit 0111cd7

File tree

2 files changed

+105
-114
lines changed

2 files changed

+105
-114
lines changed

lyoUtil.h

+42-49
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,23 @@
11
#pragma once
22

3-
#include <iostream>
4-
#include <string>
5-
#include <vector>
6-
#include <locale>
7-
#include <limits>
8-
#include <Windows.h>
9-
#include <fcntl.h>
10-
#include <time.h>
11-
#include <io.h>
3+
#define NOMINMAX // Windows.h má svoji vlastní definici MAX, tu musíme zrušit, jinak by nefungoval flushCin.
4+
5+
#include <iostream> // wcin, wstring
6+
#include <vector> // vektory
7+
#include <string> // getline
8+
#include <locale> // setlocale
9+
#include <limits> // numeric_limits
10+
#include <random> // random_device, mt19937
11+
#include <Windows.h> // wmain, SendInput, SetConsoleTextAttribute
1212

1313
using namespace std;
1414

15-
// Promìnné
16-
wstring wts;
17-
int delay = 30;
18-
int inbDelay = 0;
15+
// Promìnné a jejich základní hodnoty
1916
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
17+
wstring wts;
18+
unsigned short delay = 30;
19+
unsigned short inbDelay = 0;
20+
2021

2122

2223

@@ -27,7 +28,7 @@ void sendText() {
2728
enter.type = INPUT_KEYBOARD;
2829
enter.ki.dwFlags = 0;
2930

30-
for (int i = 0; i < wts.length(); i++) {
31+
for (short i = 0; i < wts.length(); i++) {
3132

3233
HKL myKL = GetKeyboardLayout(0);
3334
SHORT scan = VkKeyScanExW(wts[i], myKL);
@@ -74,60 +75,52 @@ void sendText() {
7475
Sleep(delay);
7576
}
7677

77-
// Použijte pøed getline, pokud ho nìkdy pøecházel wcin.
7878

79-
void FlushCinW() {
79+
80+
81+
// Nutné pøed každým getline.
82+
83+
void flushCin() {
8084

8185
wcin.clear();
8286
wcin.ignore(numeric_limits<streamsize>::max(), '\n');
8387
}
8488

85-
// Usnadní práci jen trochu, ale i tak je užiteèná.
8689

87-
void SetColor(WORD msgColor) {
88-
89-
SetConsoleTextAttribute(hConsole, msgColor); // Jen v cmd prostøedí!
90-
}
9190

9291

93-
void PrintColoredMsg(bool isRainbow, int clrBase, wstring msg, WORD nextColor) {
9492

95-
// isRainbow - Má to být duhové?
96-
// clrBase - V pøípadì jednobarevného urèuje barvu, v pøípadì duhového urèuje základnu
97-
// msg - Co bude zbarvené a cout-ované?
98-
// nextColor - Jaká barva bude nastavena po dokonèení?
99-
100-
if (isRainbow == true) {
101-
int clr = clrBase;
93+
// Ohavná funkce, zatím ale nemám na výbìr, pokud chci opravit tu resetující se barvu textu...
94+
// Nìkdy(!) z toho udìlám Win32 aplikaci, to by mi snad mohlo nìjak usnadnit život.
10295

103-
for (int i = 0; i < msg.length(); i++) {
96+
void printColoredMsg(WORD clrBase, wstring msg, WORD nextColor = 0) { // nextColor neni povinný parametr.
10497

105-
SetConsoleTextAttribute(hConsole, clr);
106-
clr++;
98+
for (short i = 0; i < msg.length(); i++) {
10799

108-
if (clr > clrBase + 6) {
100+
SetConsoleTextAttribute(hConsole, clrBase);
109101

110-
clr = clrBase;
111-
}
102+
wcout << msg[i];
112103

113-
cout << msg[i];
114-
}
104+
#ifndef LYONOSLEEP
105+
Sleep(1);
106+
#endif
115107
}
116-
else {
117-
118-
SetConsoleTextAttribute(hConsole, clrBase);
119-
wcout << msg;
120-
}
121-
SetConsoleTextAttribute(hConsole, nextColor);
108+
109+
if (nextColor != 0) { SetConsoleTextAttribute(hConsole, nextColor); } // užiteèné pro nastavení samostatné barvy pro (w)cin/getline.
122110
}
123111

124-
// Tato funkce je plnì automatizovaná - vektor mùže mít jakýkoliv
125-
// typ a velikost, a ChooseRandElem to pøijme díky templatu
112+
113+
114+
115+
// "If it ain't broke, don't fix it." Slyšeli jste nìkdy toto rèení? Já ne,
116+
// teï je to zase broke a nemám ponìtí jak to opravit.
126117

127118
template<typename T>
128-
T ChooseRandElem(vector<T> &arr) {
129-
130-
int randIndex = rand() % arr.size();
119+
wstring rIndex(T &vec) {
120+
121+
random_device rDevice;
122+
mt19937 rGen(rDevice());
123+
uniform_int_distribution<> rDist(0, vec.size() - 1);
131124

132-
return arr[randIndex];
125+
return vec[rDist(rGen)].c_str();
133126
}

spam.cpp

+63-65
Original file line numberDiff line numberDiff line change
@@ -1,127 +1,125 @@
1-
// Jednoduchý C++ spammer. Kvůli využití wmain() musí být všechny I/O operace wide (široké), tzn. string musí být wstring a cin musí být wcin.
2-
// Před každým stringem musí také být prefix L (pro wide string).
3-
// _setmode zajišťuje Unicode podporu, tudíž není nutné nastavovat locale a codepage.
1+
// Celkem jednoduchá aplikace na spamování Vámi vybraného textu. Podporuje Unicode. Teda, měla by.
2+
// Všechny I/O operace musí mít předponu w (wide - široké, nutné pro Unicode) a všechny stringy musí mít předponu L (long - také nutné pro Unicode).
3+
// Z nějakého důvodu wide funkce způsobují to, že se text v náhodném bodě změní zpět na základní barvu (7). Proto se text načítá postupně.
4+
// Pokud se mi nebudou chtít překládat nějaké výrazy z angličtiny, prostě je tak nechám.
45

6+
// #define LYONOSLEEP
7+
#define SUCCESS 10
8+
#define FAILURE 12
9+
#define USERINPUT 11
10+
#define WHITE 15
511

12+
#include "lyoUtil.h"
613

14+
using namespace std;
715

8-
// Windows definice
9-
#define NOMINMAX
1016

11-
// Konstantní výrazy
12-
constexpr int B_BASE = 9;
13-
constexpr int SUCCESS = 10;
14-
constexpr int FAILURE = 12;
15-
constexpr int USERINPUT = 11;
16-
constexpr int WHITE = 15;
1717

18-
#include "lyoUtil.h"
19-
20-
using namespace std;
2118

2219
int wmain() {
23-
24-
// Seed pro rand()
25-
srand((unsigned int)time(NULL));
2620

27-
// Proměnné a jejich základní hodnoty
21+
// Variables
2822
wstring ans;
29-
delay = 30;
3023

31-
// Vektory
32-
vector<wstring> splashText = { L"Le fishe au chocolat.", L"Napajedla neexistují.", L"Praise Gabča.", L"30x rychlejší než Python.", L"Garance špagetového kódu.", L"Schváleno Kuncišem.", L"Směřujte spam na lyorig#0775.", L"Isn't it?", L"Nenávidím tento jazyk.", L"Pořád stabilnější než Fallout 76.", L"Kvůli tomuto mám dvojku z biologie.", L"Spam! není spam."};
33-
vector<wstring> titleText = { L"Audavillage", L"Videomath", L"paint.com", L"Imagine 2", L"Malování 4D", L"XboxDiagram", L"C++Charm", L"Kyberdigi", L"Craftmine", L"Windows Defender" };
24+
25+
26+
27+
// Arrays
28+
const vector<wstring> splashText = { L"Le fishe au chocolat.", L"Napajedla neexistují.", L"Praise Gabča.", L"30x rychlejší než Python!", L"Garance špagetového kódu.", L"Schváleno Jakubem Kuncem.", L"Směřujte spam na lyorig#0775.", L"Isn't it?", L"Nenávidím tento jazyk.", L"Pořád stabilnější než Fallout 76.", L"Kvůli tomuto mám dvojku z biologie.", L"Spam! není spam.", L"Drei aktivitäten.", L"Mám vás všechny uložené.", L"\"Beate, telefon!\"", L"Brzy na OnlyFans(tm).", L"Hör zu und ergänze den Dialog."};
29+
const vector<wstring> titleText = { L"Audavillage", L"Videomath", L"paint.com", L"Imagine 2", L"Malování 4D", L"XboxDiagram", L"C++Charm", L"Kyberdigi", L"Bing Chilling", L"Toto != virus", L"hek.ekse", L"já když", L"hendrych je gay", L"Capybara therapy (CBT)", L"Postrach Defenderu", L"cmd > Win32", L"Václav Moravec", L"h"};
30+
3431

35-
// Základní nastavení
36-
SetConsoleTitleW(ChooseRandElem(titleText).c_str());
37-
SetColor(WHITE);
3832

39-
(void)_setmode(_fileno(stdout), _O_U16TEXT); // Oba jsou castované na void protože jinak Visual Studio hází
40-
(void)_setmode(_fileno(stdin), _O_U16TEXT); // varování o ignorování vratné hodnoty (kterou stejně nevyužiju)
33+
34+
// Basic settings
35+
SetConsoleTitle(rIndex(titleText).c_str()); // Pokud to chce LPCWSTR, použijte c_str().
4136

37+
setlocale(LC_ALL, "");
4238

39+
4340

4441

45-
wcout << L"(c) Petr Šácha 2022. ";
42+
printColoredMsg(WHITE, L"(c) Petr Šácha 2022. ");
4643

47-
PrintColoredMsg(false, USERINPUT, ChooseRandElem(splashText), WHITE);
44+
printColoredMsg(USERINPUT, rIndex(splashText));
4845

49-
wcout << L"\nPoužitím či modifikací programu souhlasíte se samostatností Míkovic.\n\n";
46+
printColoredMsg(WHITE, L"\nPoužitím či modifikací programu souhlasíte se samostatností Míkovic.\n\n");
5047

51-
PrintColoredMsg(false, WHITE, L"Chcete upravit nastavení? (ano/ne): ", USERINPUT);
48+
printColoredMsg(WHITE, L"Chcete ponechat doporučené nastavení? (ano/ne): ", USERINPUT);
5249

50+
InitialQ:
5351
wcin >> ans;
5452

55-
5653

5754

58-
// Goto je giga cringe ale jsem líný programátor
59-
60-
if (ans == L"ano") {
6155

62-
Q1:
63-
PrintColoredMsg(false, WHITE, L"\nProdleva mezi repeticemi (ms): ", USERINPUT);
56+
// Goto je sice giga cringe, ale jsem líný programátor.
57+
if (ans == L"ne") {
58+
59+
printColoredMsg(WHITE, L"\nProdleva mezi repeticemi (ms): ", USERINPUT);
60+
61+
Delay1:
6462
wcin >> delay;
6563

6664
if (!wcin || delay < 0 || delay > 10000) {
6765

68-
PrintColoredMsg(false, FAILURE, L"Neplatná prodleva. Zadejte jinou.\n", WHITE);
69-
FlushCinW();
70-
goto Q1;
71-
}
66+
printColoredMsg(FAILURE, L"Neplatná prodleva. Zadejte jinou: ", USERINPUT);
67+
flushCin();
7268

69+
goto Delay1;
70+
}
7371

72+
printColoredMsg(WHITE, L"\nProdleva mezi stiskem a odesláním klávesy (ms): ", USERINPUT);
7473

75-
Q2:
76-
PrintColoredMsg(false, WHITE, L"\nProdleva mezi stiskem a odesláním klávesy (ms): ", USERINPUT);
74+
Delay2:
7775
wcin >> inbDelay;
7876

7977
if (!wcin || inbDelay < 0 || inbDelay > 1000) {
8078

81-
PrintColoredMsg(false, FAILURE, L"Neplatná prodleva. Zadejte jinou.\n", WHITE);
82-
FlushCinW();
83-
goto Q2;
84-
}
85-
79+
printColoredMsg(FAILURE, L"Neplatná prodleva. Zadejte jinou: ", USERINPUT);
80+
flushCin();
8681

87-
88-
PrintColoredMsg(false, SUCCESS, L"\nNastaveno.\n", WHITE);
82+
goto Delay2;
83+
}
8984
}
9085

9186

9287

93-
else { // Cokoliv jiného než "ano" se bere jako ne
9488

95-
SetColor(SUCCESS);
89+
else if (ans == L"ano") {
9690

97-
wcout << L"\nProdleva nastavena na doporučenou (" << delay << "ms).\n";
98-
wcout << L"Prodleva mezi stiskem a odesláním klávesy nastavena na doporučenou (" << inbDelay << "ms).\n";
91+
printColoredMsg(SUCCESS, L"Základní nastavení ponechány.\n");
9992
}
10093

94+
else {
95+
96+
printColoredMsg(FAILURE, L"Neplatná odpověď. Zadejte ano/ne: ", USERINPUT);
10197

98+
goto InitialQ;
99+
}
102100

103-
PrintColoredMsg(false, WHITE, L"\nCo chcete spamovat? -> ", USERINPUT);
104101

105-
FlushCinW();
106-
getline(wcin, wts);
107-
108-
PrintColoredMsg(false, SUCCESS, L"\nPřipraveno. Držte F12 pro spam.", WHITE);
109102

110-
111-
112-
// DEBUG ZÓNA
113-
114103

104+
printColoredMsg(WHITE, L"\nCo chcete spamovat? -> ", USERINPUT);
115105

116-
// KONEC DEBUG ZÓNY
106+
flushCin();
107+
getline(wcin, wts);
117108

109+
printColoredMsg(SUCCESS, L"Připraveno. Držte F12 pro spam.");
110+
118111

119112

113+
120114
while(true) {
121115

122116
if (GetKeyState(VK_F12) & 0x8000) {
117+
123118
sendText();
124-
}
119+
}
125120
}
121+
122+
fflush(stdout);
123+
126124
return 0;
127125
}

0 commit comments

Comments
 (0)