Python. Считывание клавиш мыши и сохранение скриншота

Рейтинг: 0Ответов: 2Опубликовано: 09.05.2023

Ребят, помогите, пожалуйста! У меня возникла такая проблема: я пытаюсь сделать так, чтобы при нажатии на левую или правую кнопку мыши программа скринила экран и затем помещала готовое изображение в подпапку C:/Users/Administrator/Downloads/scr/leftmouse или C:/Users/Administrator/Downloads/scr/rightmouse. Если их нет, то создавала. Я сделал с клавиатурой, но не могу с мышью. Вот код с клавиатурой:

import pyautogui
import cv2
import numpy as np
from PIL import Image
import random
import keyboard
import os

# Задаем путь для сохранения скриншотов
path = 'C:/Users/Administrator/Downloads/scr/'

# Создаем словарь соответствия клавиш и папок
key_folders = {'w': 'w', 'a': 'a', 's': 's', 'd': 'd', 'space': 'space'}

while True:
    # Получаем скриншот экрана
    screenshot = pyautogui.screenshot()

    # Преобразуем изображение в черно-белый формат
    grayscale_image = cv2.cvtColor(np.array(screenshot), cv2.COLOR_RGB2GRAY)

    # Применяем оператор Кэнни для выделения контуров
    edges = cv2.Canny(grayscale_image, threshold1=30, threshold2=100)

    # Ищем нажатые клавиши в словаре и сохраняем скриншот в соответствующую папку
    for key in key_folders:
        if keyboard.is_pressed(key):
            folder_name = key_folders[key]
            file_name = 'screenshot_' + str(random.randint(0, 9999)) + '.jpg'
            full_path = os.path.join(path, folder_name, file_name)
            os.makedirs(os.path.dirname(full_path), exist_ok=True)
            image = Image.fromarray(edges)
            image.save(full_path)

Ответы

▲ 0Принят

Для считывания нажатий клавиш мыши и сохранения скриншотов в соответствующих папках, вам потребуется использовать модуль pynput.

Вот пример кода, который позволяет сделать скриншот экрана при нажатии левой или правой кнопки мыши и сохранить его в соответствующей папке:

python

import pyautogui
import cv2
import numpy as np
from PIL import Image
import random
import os
from pynput import mouse

# Задаем путь для сохранения скриншотов
path = 'C:/Users/Administrator/Downloads/scr/'

# Создаем словарь соответствия кнопок и папок
button_folders = {mouse.Button.left: 'leftmouse', mouse.Button.right: 'rightmouse'}

# Функция обработки нажатия кнопки мыши
def on_click(x, y, button, pressed):
    if pressed and button in button_folders:
        folder_name = button_folders[button]
        file_name = 'screenshot_' + str(random.randint(0, 9999)) + '.jpg'
        full_path = os.path.join(path, folder_name, file_name)
        os.makedirs(os.path.dirname(full_path), exist_ok=True)

        # Получаем скриншот экрана
        screenshot = pyautogui.screenshot()

        # Преобразуем изображение в черно-белый формат
        grayscale_image = cv2.cvtColor(np.array(screenshot), cv2.COLOR_RGB2GRAY)

        # Применяем оператор Кэнни для выделения контуров
        edges = cv2.Canny(grayscale_image, threshold1=30, threshold2=100)

        # Сохраняем скриншот в соответствующую папку
        image = Image.fromarray(edges)
        image.save(full_path)

# Создаем слушатель для нажатий кнопок мыши
listener = mouse.Listener(on_click=on_click)
listener.start()

# Ожидаем окончания работы программы
listener.join()

В этом коде мы используем модуль pynput для отслеживания нажатий кнопок мыши. Функция on_click вызывается при каждом нажатии кнопки мыши. Если нажатая кнопка присутствует в словаре button_folders, то создается соответствующая папка, генерируется случайное имя файла, и скриншот сохраняется в указанной папке.

Обратите внимание, что для работы с модулем pynput может потребоваться установка дополнительных зависимостей. Вы можете установить их, выполнив команду pip install pynput.

▲ 0

Код с мышью

import asyncio
from pynput import mouse

def on_click(x, y, button, pressed):
    if pressed:
        # здесь делать и сохранять скриншот
        print(f"x={x} y={y} button={button}")
    return True

async def listen_mouse():
    with mouse.Listener(
        on_click=on_click,
    ) as listener:
        listener.join()

if __name__ == '__main__':
    asyncio.run(listen_mouse())