Использование pyHook для получения координат мыши для воспроизведения позже

Я пишу кусок кода, чтобы получить информацию о щелчке мыши, используя pyHook, а затем win32api, чтобы получить доступ к функции щелчка. По сути, я пытаюсь использовать мышь для записи последовательности кликов, которые будут записаны и воспроизведены позже.

Вот мой настоящий код:

import win32api, win32con, time, win32ui, pyHook, pythoncom

#Define the clicks in the win32api
def click(x,y):
    win32api.SetCursorPos((x,y))
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)

def onclick(event):
    click()
    print event.Position
    return True

hm = pyHook.HookManager()
hm.SubscribeMouseAllButtonsDown(click)
hm.HookMouse()
pythoncom.PumpMessages()
hm.UnhookMouse()

Я уверен, что есть что-то тупо простое.

Также вот отладка, которую я получил от запуска этого: ->

Traceback (most recent call last):
File "C:\Python27\lib\site-packages\pyHook\HookManager.py", line 325, in MouseSwitch
return func(event)
TypeError: click() takes exactly 2 arguments (1 given)

Ответы на вопрос(3)

Не устанавливайте Pyhook, так что это удар в темноте. Я've предположил (event_x, event_y) = event.Position.

import win32api, win32con, time, win32ui, pyHook, pythoncom

#Define the clicks in the win32api
def click(x,y):
    win32api.SetCursorPos((x,y))
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)

def onclick(event):
    print event.Position
    (event_x, event_y) = event.Position
    click(event_x, event_y)
    return True

hm = pyHook.HookManager()
hm.SubscribeMouseAllButtonsDown(onclick)
hm.HookMouse()
pythoncom.PumpMessages()
hm.UnhookMouse()
 CodeMonkeyAlx24 июн. 2013 г., 18:59
этот вид работ для того, что я пытаюсь сделать. но теперь он повторяет две координаты снова и снова 14 раз, прежде чем пропустить еще один щелчок (допустим, что для прохождения 14 циклов требуется меньше секунды)
 CodeMonkeyAlx25 июн. 2013 г., 18:52
Это, честно говоря, только первая часть головоломки. Я знаю, как заставить его отображать координаты, но теперь мне нужно их сохранить / воспроизвести.
 dilbert25 июн. 2013 г., 00:00
Ах, я думаю, фальсетруОтвет, вероятно, ближе к тому, что вы хотите. Я не'не знаю, как работает pyhook; Казалось бы, поставив эмулированный клик "win32con.MOUSEEVENTF_LEFTDOWN» внутри обработчика события, вызовет обработчик события "по щелчку" снова.

и вы передаете кортеж (event.position является кортежем). Делай вместо этого:

    def click((x,y)):

hm.SubscribeMouseAllButtonsDown(click) hm.SubscribeMouseAllButtonsDown(onclick)

Удаленыclick() вызывать .onclick

import win32api, win32con, time, win32ui, pyHook, pythoncom

def click(x,y):
    win32api.SetCursorPos((x,y))
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)

def onclick(event):
    print event.Position
    return True

hm = pyHook.HookManager()
hm.SubscribeMouseAllButtonsDown(onclick)
hm.HookMouse()
pythoncom.PumpMessages()
hm.UnhookMouse()

Ваш ответ на вопрос