Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python win32api.mouse_event TypeError

import sys
import win32api, win32con
import pyHook
import pythoncom

def CursorLeft():
    win32api.mouse_event(win32con.MOUSEEVENTF_MOVE, -1, 0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0)

def Quit():
    print "Quitting"
    sys.exit()

# create a keyboard hook
def OnKeyboardEvent(event):
    print 'MessageName:', event.MessageName
    print 'Key:', event.Key
    if event.Key in ['Numpad2']:
        CursorLeft()
    elif event.Key in ['End']:
        Quit()
    return True

def OnMouseEvent(event):
    print 'Position:', event.Position
    return True

hm = pyHook.HookManager()
hm.MouseAll = OnMouseEvent
hm.HookMouse()
hm.KeyDown = OnKeyboardEvent
hm.HookKeyboard()
pythoncom.PumpMessages()

The function CursorLeft works fine every other time. It also works fine without any negative numbers as parameters. I am completely lost as to why this is happening!

First call, fine.

Second call,

TypeError: an integer is required

Third call, fine.

Fourth call,

TypeError: an integer is required.

so on and so on.





Solved

win32api.mouse_event(win32con.MOUSEEVENTF_MOVE, -1, 0, 0, 0)

The last two parameters passed allow the function to behave properly. I am still not sure as to why and would still like to know but at least it is working now.

Solved

return True

Very important that the event functions return true.

like image 306
Junkah Avatar asked Nov 13 '22 00:11

Junkah


1 Answers

Copying the answer from the comments in order to remove this question from the "Unanswered" filter:

return True

Very important that the event functions return true.

~ answer per Junkah

like image 96
DreadPirateShawn Avatar answered Dec 06 '22 21:12

DreadPirateShawn