Amazing-Python-Scripts

Форк
0
85 строк · 1.9 Кб
1
from pynput.mouse import Controller as MouseController, Button
2
from pynput.keyboard import Controller as KeyboardController, Key
3

4
__all__ = [
5
    'Key',
6
    'Button',
7
    'Mouse',
8
    'Keyboard',
9
]
10

11

12
class Device:
13

14
    active = False
15

16
    def dispatch(self, seconds_passed):
17
        pass
18

19

20
class Mouse(Device):
21

22
    def __init__(self, speed=200):
23
        self.speed = speed
24
        self.controller = MouseController()
25
        self.active = set()
26
        self.dx = {Key.left: -1, Key.right: 1}
27
        self.dy = {Key.up: -1, Key.down: 1}
28
        self.pos0 = (0, 0)
29
        self.pos1 = self.pos0
30

31
    @property
32
    def button(self):
33
        return (self.press, self.release)
34

35
    def press(self, button):
36
        self.controller.press(button)
37

38
    def release(self, button):
39
        self.controller.release(button)
40

41
    def scroll(self, dx, dy):
42
        self.controller.scroll(dx, dy)
43

44
    @property
45
    def motion(self):
46
        return (self.start_motion, self.stop_motion)
47

48
    def start_motion(self, key):
49
        self.active.add(key)
50

51
    def stop_motion(self, key):
52
        self.active.discard(key)
53

54
    def dispatch(self, delta):
55
        dx = sum([self.dx.get(key, 0) for key in self.active])
56
        dy = sum([self.dy.get(key, 0) for key in self.active])
57
        x0, y0 = self.pos0
58
        x1, y1 = self.pos1
59
        x1 += dx * delta * self.speed
60
        y1 += dy * delta * self.speed
61
        x2 = round(x1)
62
        y2 = round(y1)
63
        self.pos0 = (x2, y2)
64
        self.pos1 = (x1, y1)
65
        if x2 != x0 or y2 != y0:
66
            self.controller.move(x2 - x0, y2 - y0)
67

68

69
class Keyboard(Device):
70

71
    def __init__(self):
72
        self.controller = KeyboardController()
73

74
    @property
75
    def key(self):
76
        return (self.press, self.release)
77

78
    def press(self, key):
79
        self.controller.press(key)
80

81
    def release(self, key):
82
        self.controller.release(key)
83

84
    def dispatch(self, delta):
85
        pass
86

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.