From d49eb3cb9a43d39250f2f5e526a98a68fb0a6f93 Mon Sep 17 00:00:00 2001 From: yakov <61390950+thewh1teagle@users.noreply.github.com> Date: Mon, 4 Dec 2023 15:17:11 +0200 Subject: [PATCH] add middle click and dnd --- examples/drag_and_drop.py | 10 ++++++++++ examples/github_star.py | 18 ++++++++++++++++++ examples/mouse_middle.py | 10 ++++++++++ zero_hid/Keyboard.py | 1 + zero_hid/Mouse.py | 39 ++++++++++++++++++++++++++++++++------- 5 files changed, 71 insertions(+), 7 deletions(-) create mode 100644 examples/drag_and_drop.py create mode 100644 examples/github_star.py create mode 100644 examples/mouse_middle.py diff --git a/examples/drag_and_drop.py b/examples/drag_and_drop.py new file mode 100644 index 0000000..b042b54 --- /dev/null +++ b/examples/drag_and_drop.py @@ -0,0 +1,10 @@ +from zero_hid import Mouse +from time import sleep + +sleep(5) +with Mouse() as m: + m.left_click(release=False) + sleep(2) + m.move(100, 100) + sleep(2) + m.release() \ No newline at end of file diff --git a/examples/github_star.py b/examples/github_star.py new file mode 100644 index 0000000..d6de583 --- /dev/null +++ b/examples/github_star.py @@ -0,0 +1,18 @@ +from zero_hid import Mouse, Keyboard, KeyCodes +from time import sleep + + +with Keyboard() as k, Mouse() as m: + k.press([KeyCodes.MOD_LEFT_GUI], KeyCodes.KEY_R) + sleep(3) + k.type('https://github.com/thewh1teagle/zero-hid') + sleep(2) + k.press([], KeyCodes.KEY_ENTER) + sleep(3) + for i in range(20): + m.move(127, -127) + for i in range(2): + m.move(-100, 0) + m.move(0, 120) + sleep(3) + m.left_click() diff --git a/examples/mouse_middle.py b/examples/mouse_middle.py new file mode 100644 index 0000000..581a2e2 --- /dev/null +++ b/examples/mouse_middle.py @@ -0,0 +1,10 @@ +from zero_hid import Mouse +from time import sleep + + +with Mouse() as m: + sleep(5) + m.middle_click(release=False) + m.move(0, 300) + sleep(3) + m.release() \ No newline at end of file diff --git a/zero_hid/Keyboard.py b/zero_hid/Keyboard.py index fec8e4a..03efc37 100644 --- a/zero_hid/Keyboard.py +++ b/zero_hid/Keyboard.py @@ -57,6 +57,7 @@ def press(self, mods: List[int], key_code: int = 0, release=True): mods = reduce(operator.and_, mods, 0) send_keystroke(self.dev, mods, key_code, release=release) + def release(self): release_keys(self.dev) diff --git a/zero_hid/Mouse.py b/zero_hid/Mouse.py index b1ba3c5..b555a80 100644 --- a/zero_hid/Mouse.py +++ b/zero_hid/Mouse.py @@ -10,6 +10,7 @@ def __init__(self, dev = None, absolute = False) -> None: self.__setup_device(dev, absolute) self.__setup_move(absolute) self.__send_mouse_event = absolute_mouse_event if absolute else relative_mouse_event # dynamic mouse event method + self.buttons_state = 0x0 def __setup_device(self, dev, absolute: bool): @@ -23,13 +24,24 @@ def __setup_device(self, dev, absolute: bool): def __setup_move(self, absolute: bool): self.move = self.__move_absolute if absolute else self.__move_relative # dynamic move method - def left_click(self): + def left_click(self, release = True): self.__send_mouse_event(self.dev, 0x1, 0, 0, 0, 0) - self.__send_mouse_event(self.dev, 0x0, 0, 0, 0, 0) + self.buttons_state = 0x1 + if release: + self.release() - def right_click(self): + def right_click(self, release = True): self.__send_mouse_event(self.dev, 0x2, 0, 0, 0, 0) + self.buttons_state = 0x2 + if release: + self.release() + + def release(self): + """ + Release Mouse Buttons + """ self.__send_mouse_event(self.dev, 0x0, 0, 0, 0, 0) + self.buttons_state = 0x0 def scroll_y(self, position: int): """ @@ -38,7 +50,7 @@ def scroll_y(self, position: int): """ if not -127 <= position <= 127: raise RelativeMoveRangeError(f"Value of y {position} out of range (-127 - 127)") - self.__send_mouse_event(self.dev, 0, 0, 0, position, 0) + self.__send_mouse_event(self.dev, self.buttons_state, 0, 0, position, 0) def scroll_x(self, position: int): """ @@ -47,7 +59,20 @@ def scroll_x(self, position: int): """ if not -127 <= position <= 127: raise RelativeMoveRangeError(f"Value of x: {position} out of range (-127 - 127)") - self.__send_mouse_event(self.dev, 0, 0, 0, 0, position) + self.__send_mouse_event(self.dev, self.buttons_state, 0, 0, 0, position) + + + def middle_click(self, release = True): + self.__send_mouse_event(self.dev, 0x4, 0, 0, 0, 0) + self.buttons_state = 0x4 + if release: + self.release() + + def raw(self, buttons_state, x, y, scroll_y, scroll_x): + """ + Control the way you like + """ + self.__send_mouse_event(self.dev, self.buttons_state, x, y, scroll_y, scroll_x) def __move_relative(self, x, y): """ @@ -58,14 +83,14 @@ def __move_relative(self, x, y): raise RelativeMoveRangeError(f"Value of x: {x} out of range (-127 - 127)") if not -127 <= y <= 127: RelativeMoveRangeError(f"Value of y: {y} out of range (-127 - 127)") - self.__send_mouse_event(self.dev, 0x0, x, y, 0, 0) + self.__send_mouse_event(self.dev, self.buttons_state, x, y, 0, 0) def __move_absolute(self, x, y): if not 0 <= x <= 65535: raise RelativeMoveRangeError(f"Value of x: {x} out of range (0 - 65535)") if not 0 <= y <= 65535: RelativeMoveRangeError(f"Value of y: {y} out of range (0 - 65535)") - self.__send_mouse_event(self.dev, 0x0, x, y, 0, 0) + self.__send_mouse_event(self.dev, self.buttons_state, x, y, 0, 0) def __enter__(self):