39 lines
1.1 KiB
Python
39 lines
1.1 KiB
Python
import os
|
|
import platform
|
|
import subprocess
|
|
from pathlib import Path
|
|
|
|
from pynput.keyboard import Key, KeyCode
|
|
from pynput.mouse import Button
|
|
|
|
|
|
def name_to_key(name: str) -> Key | KeyCode:
|
|
try:
|
|
return getattr(Key, name)
|
|
except AttributeError:
|
|
return KeyCode.from_char(name)
|
|
|
|
def name_to_button(name: str) -> Button:
|
|
return getattr(Button, name)
|
|
|
|
def get_recordings_dir() -> str:
|
|
documents_folder = Path.home() / 'Documents' / 'DuckTrack_Recordings'
|
|
return str(documents_folder)
|
|
|
|
def fix_windows_dpi_scaling():
|
|
"""
|
|
Fixes DPI scaling issues with legacy windows applications
|
|
Reference: https://pynput.readthedocs.io/en/latest/mouse.html#ensuring-consistent-coordinates-between-listener-and-controller-on-windows
|
|
"""
|
|
import ctypes
|
|
PROCESS_PER_MONITOR_DPI_AWARE = 2
|
|
ctypes.windll.shcore.SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE)
|
|
|
|
def open_file(path):
|
|
if platform.system() == "Windows":
|
|
os.startfile(path)
|
|
elif platform.system() == "Darwin":
|
|
subprocess.Popen(["open", path])
|
|
else:
|
|
subprocess.Popen(["xdg-open", path])
|