под виндой нужно будет использовать windows api и её функцию https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwindowshookexw
для установки коллбэка на соответствующие действия. твоя функция, тогда, должна будет обрабатывать события мышки как тебе нужно.
небольшой гуглёж по поиску биндингов вин апи для питона - показывает фрустрацию. оно и понятно: проще взять C++ или Delphi/FreePascal у которых есть готовая бинарная совместимость с виндой.
если есть желание продолжать с питоном, то придётся разбираться с установкой libffi и работой с ней: это библиотека, которая мапит бинарные вызовы в работающий скрипт, позволяя делать коллбэки из других языков в питон.
вместо libffi, можно самостоятельно написать библиотеку-прослойку на c++/Delphi/FreePascal и сделать в ней интерфейс для питона и подгружать эту библиотеку в виде модуля и дёргать коллбэк через неё..
ещё можно попробовать использовать Cython - язык для написания расширений для питона - он тоже умеет работать с коллбэками (через libffi как раз)
вобщем, под виндой в питоне тут не паханое поле.
если же речь о линуксе, то нужно будет сначала задетектить что сейчас запущено Wayland или X11 и плясать уже от этого.