|
import pynput |
|
import pydirectinput |
|
from ctypes import windll, create_unicode_buffer, wintypes |
|
|
|
class KeyboardListener(pynput.keyboard.Listener): |
|
is_shift_down = False |
|
|
|
def __init__(self): |
|
return super().__init__(on_press = self.on_press, on_release = self.on_release) |
|
|
|
def can(self): |
|
hwnd = windll.user32.GetForegroundWindow() |
|
length = windll.user32.GetWindowTextLengthW(hwnd) |
|
buf = create_unicode_buffer(length + 1) |
|
windll.user32.GetWindowTextW(hwnd, buf, length + 1) |
|
|
|
return "Demon's Souls" in buf.value |
|
|
|
def on_press(self, key): |
|
if not self.can(): return |
|
if key == pynput.keyboard.Key.delete: return False |
|
if key == pynput.keyboard.Key.shift_l: self.is_shift_down = True |
|
|
|
def on_release(self, key): |
|
if not self.can(): return |
|
if key == pynput.keyboard.Key.shift_l: self.is_shift_down = False |
|
|
|
class MouseListener(pynput.mouse.Listener): |
|
def __init__(self, keyboard: KeyboardListener): |
|
self.keyboard = keyboard |
|
|
|
return super().__init__(win32_event_filter = self.filter) |
|
|
|
def filter(self, message, data): |
|
if not self.keyboard.can(): return |
|
if not self.keyboard.is_shift_down: return |
|
|
|
match message: |
|
case self.WM_LBUTTONDOWN: |
|
if self.left(): self.suppress_event() |
|
|
|
case self.WM_RBUTTONDOWN: |
|
if self.right(): self.suppress_event() |
|
|
|
case self.WM_MOUSEWHEEL: |
|
if self.wheel(wintypes.SHORT(data.mouseData >> 16).value / 120): self.suppress_event() |
|
|
|
def left(self): |
|
pydirectinput.press("f2") |
|
return True |
|
|
|
def right(self): |
|
pydirectinput.press("f1") |
|
return True |
|
|
|
def wheel(self, delta): |
|
pydirectinput.press("left" if (delta < 0) else "right") |
|
return True |
|
|
|
|
|
kb = KeyboardListener() |
|
mouse = MouseListener(kb) |
|
|
|
kb.start() |
|
mouse.start() |
|
|
|
import time |
|
while True: time.sleep(1) |