Могу ли я использовать Python для захвата событий клавиатуры и мыши в OSX?
Я пытаюсь написать простой макрос-рекордер в Python для OSX-что-то, что может захватывать мышь и ключевые события, когда скрипт работает в фоновом режиме и воспроизводить их. Я могу использовать autopy для последнего, есть ли аналогичная простая библиотека для первого?
5 ответов
сегодня я столкнулся с несколькими решениями этой проблемы и решил, что я вернусь и поделюсь здесь, чтобы другие могли сэкономить время поиска.
отличное кросс-платформенное решение для моделирования ввода с клавиатуры и мыши:http://www.autopy.org/
Я также нашел краткий, но рабочий (как Mountain Lion) пример того, как глобально регистрировать ключевые штрихи. Единственное предостережение заключается в том, что вы должны использовать Python2.6 поскольку 2.7, похоже, не имеет модулей objc доступный.
#!/usr/bin/python2.6
"""PyObjC keylogger for Python
by ljos https://github.com/ljos
"""
from Cocoa import *
import time
from Foundation import *
from PyObjCTools import AppHelper
class AppDelegate(NSObject):
def applicationDidFinishLaunching_(self, aNotification):
NSEvent.addGlobalMonitorForEventsMatchingMask_handler_(NSKeyDownMask, handler)
def handler(event):
NSLog(u"%@", event)
def main():
app = NSApplication.sharedApplication()
delegate = AppDelegate.alloc().init()
NSApp().setDelegate_(delegate)
AppHelper.runEventLoop()
if __name__ == '__main__':
main()
для ввода мыши просто замените NSKeyDownMask
с соответствующей маской из списка, доступного здесь: http://developer.apple.com/library/mac/#documentation/cocoa/Reference/ApplicationKit/Classes/NSEvent_Class/Reference/Reference.html#//apple_ref/occ/clm/NSEvent/addGlobalMonitorForEventsMatchingMask:handler:
например, NSMouseMovedMask
произведения для отслеживания движений мыши.
Оттуда вы можете получить доступ к событию.locationInWindow() или другие атрибуты.
вот решение без использования curses
:
http://docs.python.org/faq/library.html#how-do-i-get-a-single-keypress-at-a-time
этот вопрос был задан некоторое время назад - Python кросс-платформенное прослушивание нажатий клавиш?
вы можете найти образец кода там полезным!
Я знаю, что вы можете использовать curses
для захвата ввода ключа, но я не уверен, о мыши. Не только это, но если я не ошибаюсь, он включен в библиотеку std с 2.7.2.
Кельвин Ченг, спасибо. ваше предложение работает на OS X 10.8.5.
код от http://docs.python.org/faq/library.html#how-do-i-get-a-single-keypress-at-a-time
#!/usr/bin/python
import termios, fcntl, sys, os
fd = sys.stdin.fileno()
oldterm = termios.tcgetattr(fd)
newattr = termios.tcgetattr(fd)
newattr[3] = newattr[3] & ~termios.ICANON & ~termios.ECHO
termios.tcsetattr(fd, termios.TCSANOW, newattr)
oldflags = fcntl.fcntl(fd, fcntl.F_GETFL)
fcntl.fcntl(fd, fcntl.F_SETFL, oldflags | os.O_NONBLOCK)
try:
while 1:
try:
c = sys.stdin.read(1)
print "Got character", repr(c)
except IOError: pass
finally:
termios.tcsetattr(fd, termios.TCSAFLUSH, oldterm)
fcntl.fcntl(fd, fcntl.F_SETFL, oldflags)
еще одно решение ключевые слушатели в python?