import datetime # datetime functions import time # time functions # Init the keyboard listener def Init(inGSettings): pass # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Technical defs import pdb SpecialKeyList = [] inList = [ # { # "EventStartDatetime": datetime.datetime.now(), # "EventEndDatetime": datetime.datetime.now(), # "EventTypeStr": "MOVE", # MOVE | CLICK | SCROLL | SELECT # "ValueInt": "" # MOVE: point count # } ] gMoveWaitNextPointPercentFloat = 4 gMoveWaitNextPointSecondsFloat = None gMovePrevious = None # {"EventDatetime": datetime.datetime.now(), "XInt": None, "YInt": None} gMovePointCountInt = None gMoveFirstDatetime = None gMoveCloseCheckIntervalSecondsFloat = 3 from pynput import mouse import mouse as mouse_new # https://github.com/boppreh/mouse#mouse.hook def on_move(x, y): global gMovePrevious global gMoveWaitNextPointSecondsFloat global gMoveWaitNextPointPercentFloat global gMovePointCountInt global gMoveFirstDatetime lNowDatetime = datetime.datetime.now() if gMovePrevious is None: gMoveFirstDatetime = lNowDatetime gMovePrevious = {"EventDatetime": gMoveFirstDatetime, "XInt": x, "YInt": y} gMovePointCountInt = 1 else: lMovePreviousNew = {"EventDatetime": lNowDatetime, "XInt": x, "YInt": y} lNewOldDeltaSecondsFloat = (lMovePreviousNew["EventDatetime"]-gMovePrevious["EventDatetime"]).total_seconds() if gMoveWaitNextPointSecondsFloat is None: # We have no wait time - just calculate it gMoveWaitNextPointSecondsFloat = lNewOldDeltaSecondsFloat * gMoveWaitNextPointPercentFloat # in the end for the next point gMovePrevious = {"EventDatetime": lNowDatetime, "XInt": x, "YInt": y} gMovePointCountInt = gMovePointCountInt + 1 else: # check if we apply in time - else create new move record if gMoveWaitNextPointSecondsFloat >= lNewOldDeltaSecondsFloat: # In applied second wait range # Rewrite the globals gMoveWaitNextPointSecondsFloat = lNewOldDeltaSecondsFloat * gMoveWaitNextPointPercentFloat # in the end for the next point gMovePrevious = {"EventDatetime": lNowDatetime, "XInt": x, "YInt": y} gMovePointCountInt = gMovePointCountInt + 1 else: # Add in result list lResult = { "EventStartDatetime": gMoveFirstDatetime, "EventEndDatetime": lNowDatetime, "EventTypeStr": "MOVE", # MOVE | CLICK | SCROLL | SELECT "ValueInt": gMovePointCountInt # MOVE: point count } inList.append(lResult) print(lResult) # Close the move gMoveWaitNextPointSecondsFloat = None gMovePrevious = None gMovePointCountInt = None gMoveFirstDatetime= None #print('Pointer moved to {0}'.format( # (x, y))) def on_click(x, y, button, pressed): print('{0} at {1}'.format( 'Pressed' if pressed else 'Released', (x, y))) print(button) if not pressed: # Stop listener return True def on_scroll(x, y, dx, dy): print('Scrolled {0} at {1}'.format( 'down' if dy < 0 else 'up', (x, y))) # Collect events until released #with mouse.Listener( # on_move=on_move, # on_click=on_click, # on_scroll=on_scroll) as listener: # listener.join() # ...or, in a non-blocking fashion: #listener = mouse.Listener( # on_move=on_move, # on_click=on_click, # on_scroll=on_scroll) #listener.start() def Test(inArg): if type(inArg) is mouse_new._mouse_event.MoveEvent: on_move(x = inArg.x, y = inArg.y) mouse_new.hook(Test) import pprint while True: # Check move interval lNowDatetime = datetime.datetime.now() if gMovePrevious is not None and gMoveWaitNextPointSecondsFloat is not None: lNewOldDeltaSecondsFloat = (lNowDatetime - gMovePrevious["EventDatetime"]).total_seconds() if lNewOldDeltaSecondsFloat > gMoveWaitNextPointSecondsFloat: # Add in result list lResult = { "EventStartDatetime": gMoveFirstDatetime, "EventEndDatetime": lNowDatetime, "EventTypeStr": "MOVE", # MOVE | CLICK | SCROLL | SELECT "ValueInt": gMovePointCountInt # MOVE: point count } inList.append(lResult) print(lResult) # Close the move gMoveWaitNextPointSecondsFloat = None gMovePrevious = None gMovePointCountInt = None gMoveFirstDatetime = None time.sleep(gMoveCloseCheckIntervalSecondsFloat) #print(inList) #pprint.pprint(inList)