Skip to content

Commit

Permalink
add middle click and dnd
Browse files Browse the repository at this point in the history
  • Loading branch information
thewh1teagle committed Dec 4, 2023
1 parent b4a75be commit d49eb3c
Show file tree
Hide file tree
Showing 5 changed files with 71 additions and 7 deletions.
10 changes: 10 additions & 0 deletions examples/drag_and_drop.py
Original file line number Diff line number Diff line change
@@ -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()
18 changes: 18 additions & 0 deletions examples/github_star.py
Original file line number Diff line number Diff line change
@@ -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()
10 changes: 10 additions & 0 deletions examples/mouse_middle.py
Original file line number Diff line number Diff line change
@@ -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()
1 change: 1 addition & 0 deletions zero_hid/Keyboard.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down
39 changes: 32 additions & 7 deletions zero_hid/Mouse.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand All @@ -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):
"""
Expand All @@ -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):
"""
Expand All @@ -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):
"""
Expand All @@ -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):
Expand Down

0 comments on commit d49eb3c

Please sign in to comment.