2022-11-29 00:44:47 -05:00

89 lines
2.0 KiB
Python

import ctypes
from jaraco.windows.error import handle_nonzero_success
from jaraco.windows.api import system
from jaraco.ui.cmdline import Command
def set(value):
result = system.SystemParametersInfo(
system.SPI_SETACTIVEWINDOWTRACKING, 0, ctypes.cast(value, ctypes.c_void_p), 0
)
handle_nonzero_success(result)
def get():
value = ctypes.wintypes.BOOL()
result = system.SystemParametersInfo(
system.SPI_GETACTIVEWINDOWTRACKING, 0, ctypes.byref(value), 0
)
handle_nonzero_success(result)
return bool(value)
def set_delay(milliseconds):
result = system.SystemParametersInfo(
system.SPI_SETACTIVEWNDTRKTIMEOUT,
0,
ctypes.cast(milliseconds, ctypes.c_void_p),
0,
)
handle_nonzero_success(result)
def get_delay():
value = ctypes.wintypes.DWORD()
result = system.SystemParametersInfo(
system.SPI_GETACTIVEWNDTRKTIMEOUT, 0, ctypes.byref(value), 0
)
handle_nonzero_success(result)
return int(value.value)
class DelayParam(Command):
@staticmethod
def add_arguments(parser):
parser.add_argument(
'-d',
'--delay',
type=int,
help="Delay in milliseconds for active window tracking",
)
class Show(Command):
@classmethod
def run(cls, args):
msg = "xmouse: {enabled} (delay {delay}ms)".format(
enabled=get(), delay=get_delay()
)
print(msg)
class Enable(DelayParam):
@classmethod
def run(cls, args):
print("enabling xmouse")
set(True)
args.delay and set_delay(args.delay)
class Disable(DelayParam):
@classmethod
def run(cls, args):
print("disabling xmouse")
set(False)
args.delay and set_delay(args.delay)
class Toggle(DelayParam):
@classmethod
def run(cls, args):
value = get()
print("xmouse: %s -> %s" % (value, not value))
set(not value)
args.delay and set_delay(args.delay)
if __name__ == '__main__':
Command.invoke()