Как стать автором
Обновить

Управляем звуком ПК от активности пользователя с помощью Python

Время на прочтение6 мин
Количество просмотров7.9K
Всего голосов 4: ↑4 и ↓0+4
Комментарии8

Комментарии 8

Нужно заменить
if event == mouse.Events.Scroll or mouse.Events.Click:
на
if event in (mouse.Events.Scroll, mouse.Events.Click):
тогда будут учитываться только эти события
Можно использовать стандартную функцию WInAPI GetLastInputInfo — время, прошедшее с момента последней пользовательской активности (нажатие кнопок мыши, клавиатуры и тд.) Это лучше, чем ловить отдельные события.
но такое поведение я объяснить не могу

Когда автор писал:
if event == mouse.Events.Scroll or mouse.Events.Click

, он, вероятно, имел ввиду:
if (event == mouse.Events.Scroll) or (event == mouse.Events.Click)

По-факту же он получил:
if (event == mouse.Events.Scroll) or mouse.Events.Click

Этот if срабатывает всегда, потому что mouse.Events.Click, будучи преобразован в bool, дает True:
>>> bool(mouse.Events.Click)
True

Смотрим на цикл уровнем выше:
for event in events

Если в списке events есть хоть что-то, то начинает выполняться нижеследующий код, в нем срабатывает (всегда) if и «делается половина громкости». Это ошибка уровня «детский сад, начальная группа», даже странно видеть ее после всего этого бойкого разруливания зависимостей и cmake-ов. Автор параллельно с Питоном использует другой язык (какой?), в котором операторы сравнения работают именно так?
В ваших словах есть доля логики (по работе приходится использовать различные языки и тяжело с одного на другой переходить плюс невнимательность — про скобки не заметил), поэтому поправил код на просто — если есть любое событие мыши, тогда выполняйся.
Но
mouse.Events.Click, будучи преобразован в bool, дает True:

Проверяю — image
Что-то всё равно не так.
Вероятно, то, что вы сравниваете объект (экземпляр класса) с самим классом, либо же (я не знаю, как там оно у них внутри реализовано), если event заодно содержит в себе информацию о событии, то вы сравниваете его с неким пустым объектом, и они не равны. Например, работает, если сделать вот так:
from pynput import mouse

with mouse.Events() as events:
    for event in events:
        if type(event) == mouse.Events.Scroll:
            print("Scroll")
        elif type(event) == mouse.Events.Click:
            print("Click")
        elif type(event) == mouse.Events.Move:
            print("Move")


В документации на pynput показано, как то же самое сделать через коллбэки.

Спасибо за уточнение, вернусь с командировки - проверю на компьютере. Надо было сразу посмотреть, что там находится в events. Ещё в исходниках pynput посмотрю.

А был бы ТС пользователем ПК, а не геймером, никаких пытхонов ему бы использовать не пришлось!
Для этого хватило бы работающего в фоне баш-скрипта, использующего xdotool!!!
Что-то вы немного ошиблись.
1. Разработка шла под Windows (даже специальный хаб для статьи выбран), поэтому xdotool/bash не совсем корректны тут. Есть куча приложений для автоматизации работы с мышью и на Windows в виде отдельных приложений, но вы видимо не совсем поняли смысл статьи.
2.
а не геймером
Если вы про использование GeForce Experience, то это хороший инструмент для записи экрана, причем идёт стандартно вместе с драйверами на видеокарту.
3. Перечисленные вами инструменты не помогут мне взять и распознать лицо на веб-камере.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории