Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/22: Рейтинг темы: голосов - 22, средняя оценка - 4.55
 Аватар для Laborant666
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848

Оцените приложение. Попробуйте его сломать

01.01.2021, 14:24. Показов 4635. Ответов 35
Метки с++ (Все метки)

Студворк — интернет-сервис помощи студентам
Собственно, прошу потестировать приложение. В случае незапуска, ошибок, отказа работы прошу рассказать, что было сделано, на какой конфигурации пк. В принципе в работе я не сомневаюсь, больше жду идей и советов по улучшению. Суть приложения кликать за вас и оберегать вашу мышь в беспощадных кликерах
 Комментарий модератора 
П.5.18.Правил
Запрещено размещать задания и решения в виде картинок и других файлов с их текстом.
Вложения, ожидающие проверки
Тип файла: zip Сyber Сlick v2.0.zip
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.01.2021, 14:24
Ответы с готовыми решениями:

Оцените мини-приложение
Оцените связку react redux и код в целом, пожалуйста https://gitlab.com/Kir1/react.git п.с вёрстку не делал под мобилу

Rate my app - оцените мое приложение
Добрый день. везде в интернете один и тот же исходник. openURL:]; 1. вопрос что за Purple Software, на который никто не...

Могу ли я скачать приложение с плэй маркета, локализовать его и выложить его в маркет от себя
Доброго дня! Не знал как назвать тему. Я в этом мало понимаю. Опишу свою проблему. Я продаю термостаты. Сейчас купил термостаты с...

35
 Аватар для Laborant666
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
01.01.2021, 14:56  [ТС]
За то что приложение консольное помидорами не кидаться)

Добавлено через 17 минут
Почему запретили прикрепленный zip архив?

Добавлено через 13 минут
Раз уж нельзя прикрепить exe в тему, то вот исходный код
Кликните здесь для просмотра всего текста

C++
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
#include <iostream>
#include <Windows.h>
#include <string>
#include <sstream>
 
 
 
 
int main()
{
 
    POINT CurPos;
    CurPos.x = 0;
    CurPos.y = 0;
    int count_click = 10;
    std::string std_count_click;
 
    bool need_text = 1;
 
    setlocale(0, "ru");
    srand(NULL);
 
    GetCursorPos(&CurPos);
 
    std::cout << "Сколько раз кликать в секунду? Введите число\n";
 
    while (1)
    {
        int temp = 0;
        std::cin >> std_count_click;
        std::istringstream ss(std_count_click);
        if (ss >> temp)
        {
            
            if (temp <= 0 || temp > 20)
            {
                std::cout << "Я не могу делать меньше 1 и больше 20 кликов в секунду\nПовторите ввод\n";
            }
            else
            {
                count_click = temp;
                std::cout << "\nУстановлено " << count_click << " кликов в секунду\n\n";
                break;
            }
        }
        else
            std::cout << "Введено не число,повторите ввод\n";
    }
 
    std::cout << "Инструкция:\nЗажмите + для кибер клика\nНажмите * для выхода из программы\nНажмите - что бы выбрать новую точку для клика";
 
    while (GetKeyState(106) >= 0) //программа работает, пока не нажата *
    {
        if (GetKeyState(107) < 0)
        {
            if (need_text)
            {
                std::cout << "Кибер клик!!! :D " << "\n";
                need_text = 0;
            }
 
            //SetCursorPos(((CurPos.x - 5) + rand() % 10), ((CurPos.y - 5) + rand() % 10 ));
            SetCursorPos(CurPos.x, CurPos.y);
            
 
            mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
            Sleep(1);
            mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
 
            Sleep(1000/count_click);
            
        }
        else if (GetKeyState(109) < 0)
        {
            GetCursorPos(&CurPos);
            need_text = 1;
            std::cout << "Запомнена новая точка \\(о-о)/" << "\n";
        }
        
    } // while
    return 0;
}
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
02.01.2021, 14:06
Цитата Сообщение от Laborant666 Посмотреть сообщение
while (GetKeyState(106) >= 0) //программа работает, пока не нажата *
    {
        if (GetKeyState(107) < 0)
GetKeyState возвращает битовые флаги, зачем ты сравниваешь её на больше-меньше?
https://docs.microsoft.com/en-... etkeystate
1
 Аватар для Laborant666
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
02.01.2021, 19:35  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
GetKeyState возвращает битовые флаги, зачем ты сравниваешь её на больше-меньше?
подсмотрел само условие из кода примера в гугле. С чем сравнивать тогда? Сравнивается с нулем хорошо. GetKeyState меньше нуля - нажата кнопка - больше не нажата. Не пойму сути замечания, не с тем сравниваю? Проблем вроде бы не вызывало, за два дня ничего не упало

Добавлено через 2 минуты
oleg-m1973, по структуре кода есть замечания? Например, реализацию кликов не стал выносить в отдельную функцию, ибо используется в одном месте. Правильно это или стоит всегда подобное выносить в функцию?

Добавлено через 56 секунд
oleg-m1973, забыл вырезать реализацию кликов в радиусе 5 пикселей от запомненной точки. Она закомментирована, можете не обращать внимания

Добавлено через 5 минут
oleg-m1973, я понял о чем вы сказали. Если я уберу сравнение с нулем в условиях на нажатии плюса и минуса, то программа будет запоминать новую точку клика и кликать не пока клавиша нажата, а работать как переключатель. Нажал отпустил - кликает, нажал отпустил - перестала. При сравнении с нулем кликает пока держишь. Только что поэкспериментировал
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
02.01.2021, 20:47
Лучший ответ Сообщение было отмечено Laborant666 как решение

Решение

Цитата Сообщение от Laborant666 Посмотреть сообщение
oleg-m1973, по структуре кода есть замечания?
Твоя программа жрёт почти 100% одного из ядер процессора. Я, по-моему, тебе говорил, что GetKeyState - неблокирующая функция, и её нельзя вызывать в цикле без задержки.
1
 Аватар для Laborant666
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
02.01.2021, 20:52  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
GetKeyState возвращает битовые флаги, зачем ты сравниваешь её на больше-меньше?
oleg-m1973, в цикле без задержки она вызывается лишь, когда жмем минус, для захвата новой точки под клик. Во время самого клика вроде бы не прям уж критично. Во время клика нагрузку я уменьшить точно не смогу, а по поводу того, что программа сильно грузит систему при зажатом минусе согласен. Не знаю только как сделать, что б при нажатии минуса она установила новую точку один раз и цикл не срабатывал пока кнопку не отжали и не нажали заново. Это по идее должно снизить нагрузку
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
02.01.2021, 20:55
Цитата Сообщение от Laborant666 Посмотреть сообщение
oleg-m1973, в цикле без задержки она вызывается лишь, когда жмем минус, для захвата новой точки под клик
Ты не гадай, просто посмотри в TaskManager или ProcessExplorer сколько CPU потребляет тоя программа. Ели больше нуля, то плохо.
1
 Аватар для Laborant666
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
02.01.2021, 20:55  [ТС]
oleg-m1973, хм, странно. Я только что протестировал у себя, программа при зажатом минусе и при зажатом плюсе ест от 4% до 7% процессора. Нагрузка сопоставима с вкладкой ютуба и запущенным видео на ней
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
02.01.2021, 20:57
Цитата Сообщение от Laborant666 Посмотреть сообщение
oleg-m1973, хм, странно. Я только что протестировал у себя, программа в простое, при зажатом минусе и при зажатом плюсе ест от 4% до 7% процессора. Нагрузка сопоставима с вкладкой ютуба и запущенным видео на ней
Ну, насколько я понял, ты ничего не понял. Повторю
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
воя программа жрёт почти 100% одного из ядер процессора. Я, по-моему, тебе говорил, что GetKeyState - неблокирующая функция, и её нельзя вызывать в цикле без задержки.
Минус можно не зажимать, просто запусти
1
 Аватар для Laborant666
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
02.01.2021, 21:09  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Минус можно не зажимать, просто запусти
Всё, заметил. В простое 8-9%, при зажатом плюсе падает до 2% нагрузка. У меня диспетчер показывает общую нагрузку, а не по ядрам. И как этого избежать? В главном цикле есть же задержка, цикл в секунду срабатывает то количество раз, которое мы выбираем для количества кликов в секунду

Добавлено через 1 минуту
А нет, задержка у меня не в главном цикле, а в условии. Секунду

Добавлено через 4 минуты
oleg-m1973, перенес задержку из условия в главный цикл. Результат остался тот же. За минуту простоя, минуту активных кликов - нагрузка судя по диспетчеру скакнула до 0.1% . Проверьте у себя, вот код
Кликните здесь для просмотра всего текста

C++
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
#include <iostream>
#include <Windows.h>
#include <string>
#include <sstream>
 
 
 
 
int main()
{
 
    POINT CurPos;
    CurPos.x = 0;
    CurPos.y = 0;
    int count_click = 10;
    std::string std_count_click;
 
    bool need_text = 1;
 
    setlocale(0, "ru");
    srand(NULL);
 
    GetCursorPos(&CurPos);
 
    std::cout << "Сколько раз кликать в секунду? Введите число\n";
 
    while (1)
    {
        int temp = 0;
        std::cin >> std_count_click;
        std::istringstream ss(std_count_click);
        if (ss >> temp)
        {
            
            if (temp <= 0 || temp > 20)
            {
                std::cout << "Я не могу делать меньше 1 и больше 20 кликов в секунду\nПовторите ввод\n";
            }
            else
            {
                count_click = temp;
                std::cout << "\nУстановлено " << count_click << " кликов в секунду\n\n";
                break;
            }
        }
        else
            std::cout << "Введено не число,повторите ввод\n";
    }
 
    std::cout << "Инструкция:\nЗажмите + для кибер клика\nНажмите * для выхода из программы\nНажмите - что бы выбрать новую точку для клика";
 
    while (!GetKeyState(106)) //программа работает, пока не нажата *
    {
        if (GetKeyState(107) < 0) //при сравнении с нулем работает, пока клавиша нажата
        {                           //без сравнения клавиша будет работать как переключатель
                                    //держать будет не нужно
            if (need_text)
            {
                std::cout << "Кибер клик!!! :D " << "\n";
                need_text = 0;
            }
 
            //SetCursorPos(((CurPos.x - 5) + rand() % 10), ((CurPos.y - 5) + rand() % 10 ));
            SetCursorPos(CurPos.x, CurPos.y);
            
 
            mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
            Sleep(1);
            mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
 
            
        }
        else if (GetKeyState(109) < 0 )
        {
            GetCursorPos(&CurPos);
            need_text = 1;
            std::cout << "Запомнена новая точка \\(о-о)/" << "\n";
        }
        Sleep(1000 / count_click);
    } // while
    return 0;
}
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
02.01.2021, 21:11
Цитата Сообщение от Laborant666 Посмотреть сообщение
Sleep(1000 / count_click);
Сделай просто Sleep(10)
1
Гвоздь Задиров
 Аватар для Folian
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
02.01.2021, 21:14
Цитата Сообщение от Laborant666 Посмотреть сообщение
C++
1
while (1)
вот это.
Делай sleep внутри.

Одиночное нажатие обрабатывается иначе. Нужно хранить предыдущее состояние.
1
 Аватар для Laborant666
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
02.01.2021, 21:14  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Сделай просто Sleep(10)
не могу. Мне нужен ограничитель на количество кликов в секунду. Управляемый из программы. Некоторые игры воспринимают 10 кликов в секунду, если я сделаю Sleep(10) то будет кликать больше и игра просто не будет успевать ловить нажатия, почему-то сливается в одно, будто зажали кнопку и держат
0
 Аватар для Laborant666
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
02.01.2021, 21:15  [ТС]
Цитата Сообщение от Folian Посмотреть сообщение
вот это.
Делай sleep внутри.
Sleep в первом цикле и не нужен. Там же просто ввод числа

Добавлено через 18 секунд
Цитата Сообщение от Folian Посмотреть сообщение
Одиночное нажатие обрабатывается иначе. Нужно хранить предыдущее состояние.
Хм. А это идея, спасибо
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
02.01.2021, 21:17
Цитата Сообщение от Laborant666 Посмотреть сообщение
Некоторые игры воспринимают 10 кликов в секунду, если я сделаю Sleep(10) то будет кликать больше
Так ты это отлавливай именно при клике.
1
 Аватар для Laborant666
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
02.01.2021, 21:20  [ТС]
oleg-m1973, считать время между кликами и не давать кликнуть согласно задержке для 10 кликов в секунду?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
02.01.2021, 21:22
Цитата Сообщение от Laborant666 Посмотреть сообщение
oleg-m1973, считать время между кликами и не давать кликнуть согласно задержке для 10 кликов в секунду?
Просто добавь в главный цикл Sleep(10). Всё остальное оставь как было
C++
1
2
3
4
5
 while (!GetKeyState(106)) //программа работает, пока не нажата *
    {
::Sleep(10);
 
        if (GetKeyState(107) < 0) //при сравнении с нулем работает, пока клавиша нажата
1
 Аватар для Laborant666
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
02.01.2021, 21:29  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Просто добавь в главный цикл Sleep(10). Всё остальное оставь как было
Я понял вас, но зачем? Со Sleep(10) GetKeyState будет срабатывать 100 раз в секунду. А со Sleep(1000\count_click) в том же месте будет срабатывать от 1го до 20 раз в секунду. Ибо больше 20 кликов программа выбрать не даёт. Суммарно то нагрузка в моём варианте меньше получается

Добавлено через 1 минуту
oleg-m1973, тут другая проблема обнаружилась. У меня вместо 20 кликов программа делает 13 кликов в секунду. Вместо 12 делает 9. Онлайн сервисом проверил. Я не учел задержки работы самого цикла, как определить их? В VS2019 есть средства для замера времени выполнения цикла? Что б я мог вычесть в задержке время работы цикла и клики были верными
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
02.01.2021, 21:43
Цитата Сообщение от Laborant666 Посмотреть сообщение
Суммарно то нагрузка в моём варианте меньше получается
Ты вообще, читаешь, что я тебе пишу?
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Просто добавь в главный цикл Sleep(10). Всё остальное оставь как было
Как было в самом начале

Добавлено через 1 минуту
Цитата Сообщение от Laborant666 Посмотреть сообщение
oleg-m1973, тут другая проблема обнаружилась.
С чем тебя и поздравляю
1
 Аватар для Laborant666
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
02.01.2021, 21:52  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Ты вообще, читаешь, что я тебе пишу?
Аналогичный вопрос к вам.. Я перенес Sleep из условия в тело главного цикла. Программа теперь не грузит ядро на 100%. Я же кидал выше код с предложением потестировать у вас

Добавлено через 5 минут
oleg-m1973, с вами единственным уже не первый конфликт на форуме. Я вас прекрасно слушаю, но и вы слушайте меня. Буквально 9 сообщений назад уже прислал код с добавлением задержки в главный цикл, а не при условии. Ядро в сотку больше не долбится, я за это вам благодарен. Может я как-то не так объясняюсь, но считаю что достаточно понятно. Почему я оставил в главном цикле Sleep(1000\count_click), а не оставил этот слип в условии - потому что если оставить в теле цикла Sleep(10), то итераций цикла будет 100 в секунду всегда, а с моим вариантом слипа будет от одной итерации до двадцати. То есть мой вариант даёт меньшую нагрузку. Потому я ваше последнее предложение и отметал. Давайте жить дружно)

Добавлено через 1 минуту
Тему можно считать закрытой. Главные ошибки кажется нашли. Пойду исправлять несоответствие кликов в секунду с установленным количеством пользователем. Всем спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.01.2021, 21:52
Помогаю со студенческими работами здесь

Оцените это приложение на предмет соответствию ООП
Народ, я только пару недель учусь C# и вообще программированию в стиле ООП. Оцените пожалуйста приложение. Критика и прочее принимается....

Оцените пожалуйста моё первое простенькое приложение на C#
Замечания и критика только приветствуется. Интересует еще вопрос, а можно ли сократить количество написанного кода? И можно ли сделать так,...

Оцените ПК, за сколько его можно отдать
1. Процессор: Intel Core i7 870 2.93/8M 2. Видеокарта: 1024 Mb/PCi-E/ Power Coolor AMD Radeon HD6850 prem edition 3. Материнская...

Как сломать комп?
Немного странный вопрос возник, слегка противоположный обычным тут:) Вобщем нужно вывести компьютер из строя, саботаж учинить. У жены на...

Как сломать Windows 8
Здравствуйте! Моя подруга хочет установить Win7, но ей запрещают удалить Win8: &quot;На гарантии, пока не слетит 8-ка, нельзя установить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru