144 lines
3.7 KiB
Python
144 lines
3.7 KiB
Python
from pywinauto.application import Application
|
|
|
|
|
|
import pythoncom, pyHook
|
|
|
|
|
|
mouse_mapping = {
|
|
'mouse move': None,
|
|
'mouse right down': True,
|
|
'mouse right up': ("RightClickInput"),
|
|
'mouse left down': True,
|
|
'mouse left up': None,
|
|
'mouse wheel': None,
|
|
}
|
|
|
|
last_message = None
|
|
last_event_time = 0
|
|
def OnMouseEvent(event):
|
|
global last_event_time
|
|
# if this is the first action - remember the start time of the script
|
|
if not last_event_time:
|
|
last_event_time = event.Time
|
|
app = Application()
|
|
|
|
# wrap the window that is coming from the event
|
|
if event.Window:
|
|
wrapped = app.window_(handle = event.Window)
|
|
else:
|
|
wrapped = None
|
|
|
|
# if there was no previous message
|
|
global last_message
|
|
if last_message is None:
|
|
last_message = event.MessageName
|
|
return True
|
|
|
|
|
|
# get the button pressed
|
|
button = ""
|
|
if "right" in event.MessageName and "right" in last_message:
|
|
button = "Right"
|
|
elif "left" in event.MessageName and "left" in last_message:
|
|
button = "Left"
|
|
|
|
toplevel = ""
|
|
if wrapped and not wrapped.IsDialog():
|
|
toplevel = '.Window_(title = "%s", class_name = "%s")' %(
|
|
wrapped.TopLevelParent().WindowText(), wrapped.TopLevelParent().Class())
|
|
|
|
if "up" in event.MessageName and "down" in last_message:
|
|
print "time.sleep(%d)"% (event.Time - last_event_time)
|
|
print 'app%s.Window_(title = "%s", class_name = "%s").%sClickInput()'%(
|
|
toplevel,
|
|
wrapped.WindowText(),
|
|
wrapped.Class(),
|
|
button)
|
|
|
|
last_event_time = event.Time
|
|
last_message = event.MessageName
|
|
|
|
|
|
# called when mouse events are received
|
|
#print 'MessageName:',event.MessageName
|
|
# print 'Message:',event.Message
|
|
# print 'Time:',event.Time
|
|
#print 'Window:',event.Window
|
|
# print 'WindowName:',event.WindowName
|
|
# print 'Position:',event.Position
|
|
# print 'Wheel:',event.Wheel
|
|
# print 'Injected:',event.Injected
|
|
# print '---'
|
|
|
|
# return True to pass the event to other handlers
|
|
return True
|
|
|
|
def OnKeyboardEvent(event):
|
|
global last_event_time
|
|
|
|
# if this is the first action - remember the start time of the script
|
|
if not last_event_time:
|
|
last_event_time = event.Time
|
|
|
|
#print dir(event)
|
|
|
|
app = Application()
|
|
|
|
if event.Window:
|
|
wrapped = app.window_(handle = event.Window)
|
|
else:
|
|
pass
|
|
|
|
global last_message
|
|
if last_message is None:
|
|
last_message = event.MessageName
|
|
return True
|
|
|
|
if "down" in event.MessageName:
|
|
print "time.sleep(%d)"% (event.Time - last_event_time)
|
|
print 'app.Window_(title = "%s", class_name = "%s").Typekeys("%s")'%(
|
|
wrapped.WindowText(),
|
|
wrapped.Class(),
|
|
`event.Key`)
|
|
|
|
last_event_time = event.Time
|
|
print 'MessageName:',event.MessageName
|
|
|
|
|
|
# print 'Message:',event.Message
|
|
# print 'Time:',event.Time
|
|
# print 'Window:',event.Window
|
|
# print 'WindowName:',event.WindowName
|
|
win = event.WindowName
|
|
# print 'Ascii:', event.Ascii, chr(event.Ascii)
|
|
# print 'Key:', event.Key
|
|
# print 'KeyID:', event.KeyID
|
|
# print 'ScanCode:', event.ScanCode
|
|
# print 'Extended:', event.Extended
|
|
# print 'Injected:', event.Injected
|
|
# print 'Alt', event.Alt
|
|
# print 'Transition', event.Transition
|
|
# print '---'
|
|
|
|
# return True to pass the event to other handlers
|
|
return True
|
|
|
|
# create a hook manager
|
|
hm = pyHook.HookManager()
|
|
|
|
# watch for all mouse events
|
|
hm.MouseAll = OnMouseEvent
|
|
# set the hook
|
|
hm.HookMouse()
|
|
|
|
# watch for all mouse events
|
|
hm.KeyAll = OnKeyboardEvent
|
|
# set the hook
|
|
hm.HookKeyboard()
|
|
|
|
|
|
# wait forever
|
|
pythoncom.PumpMessages()
|
|
|
|
|