С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 19.08.2022
Сообщений: 6

Кликер

19.09.2022, 23:24. Показов 5513. Ответов 3

Студворк — интернет-сервис помощи студентам
Здравствуйте, можете пожалуйста, помочь в доработке или написании с нуля программы, если так будет легче? с++ или python.
Что должная делать программа. В общем, программа отлавливает сочетание клавиш Ctrl + G. Когда его отловила, то начинает отлавливать нажатие ЛКМ, когда было нажато ЛКМ, то программа начинает кликать. Если было снова нажато ЛКМ, то программа перестает кликать, если же снова было отловлено Ctrl + G, то программа перестает следить за ЛКМ, и мышкой можно спокойно пользоваться.А программа снова отлавливает только Ctrl + G.



Вот код:
Python
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
#Ниже кода есть объяснение
 
import win32api
import pyautogui
import time
import random
 
 
def if_click():
    global t1, pause
    pause = random.choice(delay)
    t1 = time.time()
 
 
def check_main_mask():
    global flag_mask, flag_click
    flag = win32api.GetKeyState(0x11 and 0x47)  # Виртуальный код CTRL и 'G' соответственно
 
    if flag < 0:
        flag_mask = abs(1 - flag_mask)
        if not flag_mask:
            flag_click = False
 
 
def check_click():
    global flag_click
    flag = win32api.GetKeyState(0x01)  # Виртуальный код ЛКМ
 
    if flag < 0:
        flag_click = abs(1 - flag_click)
        if flag_click:
            if_click()
 
 
flag_mask = False
flag_click = False
delay = [0.025, 0.026, 0.029, 0.028, 0.03, 0.031, 0.032, 0.033, 0.04] # Секунды
pause = 0
t1, t2 = 0, 0
 
while True:
    check_main_mask()
    if flag_mask:
        check_click()
        while flag_click:
            t2 = time.time()
            if t2 - t1 >= pause:
                if_click()
                pyautogui.click()
            check_main_mask()
            check_click()
Пройдемся по коду.

Импортировал win32api для того, чтобы отслеживать нажатые клавиши. Импортировал pyautogui для того, чтобы кликать. Между кликами есть интервал, который случайно выбирается из множества delay, вот именно для работы с этим импортировал time и random.

Переменные

flag_mask, flag_click - флаги состояний режимов. Если было отловлено Ctrl + G, то flag_mask становится True, если он до этого был True и программа снова отловит это сочетание клавиш, то этот флаг становиться False. Точно также работает flag_click, только он хранит состояние нажатия, самим пользователем, только ЛКМ. Если флаг стал True, то программа начнет кликать, но когда пользователь снова нажимает ЛКМ, программа перестает кликать. Стоит отметить, что если Ctrl + G было отловлено, когда программа кликала(flag_mask=True, flag_click=True), то flag_mask и flag_click становятся False и программа перестает кликать.

delay - множество из которого случайно выбирается число, которое станет паузой между кликом, который сделает программа и кликом, который будет она еще сделает, если пользователь, конечно, не прервет процесс.

pause - это переменная, которая случайно принимает одно из значений delay. Эта переменная и станет паузой.

t1 и t2 - нужны для таймера, для отмера времени, между кликами, которые делает программа. *1 Программа делает t1 = time.time(), после этого программа, отслеживая сочетания клавиш(Ctrl+G или ЛКМ), параллельно делает t2 = time.time() и если разница t2 - t1 >= pause, то программа кликает и процесс возвращается в точку *1, если пользователь, конечно, не введет какое-либо сочетание клавиш(Ctrl+G или ЛКМ).



Функции

def check_main_mask(). Функция, которая нужна для отслеживания сочетания клавиш Ctrl + G. Если flag примет значение -127 или -128(в зависимости от того, в какой раз было поймано это сочетание в нечетный или в четный, соответственно), значит было отловлено данное сочетание клавиш(Ctrl+G). Если же, значение флага равно 0 или 1(в зависимости от какой раз до этого момента было поймано это сочетание клавиш в нечетный или в четный, соответственно), значит можно сказать, что пользователь не вводил Ctrl+G. Последняя проверка в коде нужна для того, чтобы выполнялось последнее условие отношений флагов flag_mask и flag_click.

def check_click(). Данная функция выполняет такую же роль как и прошлая, только отлавливает ЛКМ, которую нажимает пользователь. Только если flag_click был равен False(т.е. программа не кликала), то данная функция делает флаг True и вызывает функцию if_click().

def if_click(). Данная функция выбирает случайное значение для pause из delay, а также устанавливает t1.


Сам цикл
В начале цикл отслеживает сочетание клавиш(Ctrl+G). Пока пользователь не нажмет данное сочетание клавиш, мы не сможем пройти первый if. Когда пользователь нажмет Ctrl+G. Программа начнет отлавливать и ЛКМ и Ctrl+G. Если пользователь нажмет ЛКМ(flag_click станет True), то программа войдет во внутренний цикл, который делает клики и параллельно отслеживает сочетания клавиш(ЛКМ и CTRL+G), чтобы программа перестала кликать.


Проблематика
Во-первых, программа не может точно сразу отловить сочетание клавиш(оно может и сразу словить его, а может нужно будет нажать несколько раз и тогда она его словит).Я специально не использовал time.sleep, а игрался с t2 - t1, т.к. если использовать time.sleep, то поймать сочетания клавиш становится вообще маловероятным.
Во-вторых, программа делает очень мало кликов в секунду, всего лишь 10 CPS. Хотя интервалы довольно маленькие.


Прошу помощи, можно просто в виде подсказок, какие библиотеки лучше применять и как граматно переписать код. Большое спасибо, что дочитали до этого момента!
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.09.2022, 23:24
Ответы с готовыми решениями:

Кликер
Надо, что бы программа на питоне версии 3 и выше самостоятельно нажимала на нужную кнопку клавиатуры или мыши. Какая библиотека для этого...

Нужен кликер
Добрый день, такой вопрос, требуется много раз скопировать текст из excel вставить его в браузер в поисковую строку, нажать поиск по том...

Кликер
Здравствуйте, я хотел написать кликер при помощи фреймворка Kivy, у меня есть исходник: from kivy.app import App from...

3
78 / 73 / 19
Регистрация: 18.05.2021
Сообщений: 287
20.09.2022, 22:21
Лучший ответ Сообщение было отмечено Tarkel как решение

Решение

когда было нажато ЛКМ, то программа начинает кликать. Если было снова нажато ЛКМ
Вы уверены, что нажатие мышью с помощью pyautogui не вызовет прекращение кликов? Я понимаю, что программа работает - значит не вызовет, но не лучше ли поставить проверку на правую кнопку мыши вместо левой?

Я обычно использую для мониторинга клавиатуры pynput. Эта же библиотека позволяет и управлять мышью/клавиатурой - не нужен будет pyautogui. Попробуйте - может лучше фиксироваться нажатия будут. Но не факт.

П.С.
Вам точно нужно, чтобы программа работала в фоне, включаясь в активный режим по хоткею? Не лучше ли будет запускать эту программу по необходимости, сразу настроив на срабатывание по нажатию мыши? (например, по нажатию на среднюю кнопку - уж она вряд ли понадобится, пока будет открываться нужное окно) Или если и правда нужно, то не лучше ли будет посадить на нужный хоткей запуск программы непосредственно через системные возможности? Не будут зря ресурсы расходоваться.

Добавлено через 22 минуты
Код я бы писал примерно так:

Python
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
import time
 
pause = 0.1 # пауза между кликами
t = time.time() # контроль за временем между кликами
flag = -1
is_clicking = -1
 
def click():
    # здесь типа код для кликанья мышью
    print("click")
 
def monitoring():
    # здесь типа отслеживание хоткеев/ мыши и т.д.
    # как например, в случае нажатия правой кнопки мыши вернёт 1, 
    # в случае нужной комбинации мыши - 2
    # ничего не нажато - 0
    return 0
 
while True: # опять таки, я бы завершал прогу по хоткею, а запускал, настроив хоткей в системе.
    if flag == 1:
        if is_clicking == 1:
            if (time.time() - t) >= pause:
                click()
                t = time.time()
    
    match monitoring():
        case 1:
            is_clicking *= -1
        case 2:
            flag *= -1
2
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
21.09.2022, 08:09
Цитата Сообщение от -_human_- Посмотреть сообщение
Не лучше ли будет запускать эту программу по необходимости
Во, прям с языка снял. По тому же самому Ctrl+G
0
0 / 0 / 0
Регистрация: 19.08.2022
Сообщений: 6
21.09.2022, 22:40  [ТС]
Ладно, спасибо большое, что помогли советом, я переписал кликер, поставив его активацию просто на боковую клавишу мыши, без активации щелчком.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.09.2022, 22:40
Помогаю со студенческими работами здесь

Kivy кликер
В данном коде from kivy.app import App from kivy.uix.button import Button from kivy.uix.boxlayout import BoxLayout from...

Кликер на Python
Ну в общем начну с того что хочу с вашей помощью написать мини ботика кликер для игрульки. Есть эмулятор андроида к примеру возьмём NOX для...

Кликер на андроид
Здравствуйте. Я написал небольшой кликер на python (в windows) и с ним проблем нет, но хотелось бы как-то отвязать мышь, чтобы кликанье ...

Кликер на Python 3(не работает)
Здравствуйте!:) Я делал кликер на python 3, но код не работает как нужно, помогите пожалуйста!:wall: - это код. - это результат. ...

Кликер: не работает кнопка
from tkinter import * tk = Tk() tk.title('Clicker by Sasha') btn = Button(text='+', width=15, height=7) btn.pack() btn =...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru