我可以使用Python在OSX中捕获键盘和鼠标事件吗?
我正在尝试用Python为OSX编写一个简单的宏记录器,它可以在脚本在后台运行时捕获鼠标和按键事件,并回放它们。我可以使用后者,前者有类似的简单库吗?我知道你可以使用我可以使用Python在OSX中捕获键盘和鼠标事件吗?,python,macos,keyboard-hook,Python,Macos,Keyboard Hook,我正在尝试用Python为OSX编写一个简单的宏记录器,它可以在脚本在后台运行时捕获鼠标和按键事件,并回放它们。我可以使用后者,前者有类似的简单库吗?我知道你可以使用诅咒捕捉按键输入,但我不确定鼠标输入。不仅如此,如果我没有弄错的话,它还包含在2.7.2的std库中。这里有一个不使用诅咒的解决方案: 这个问题很久以前在这里被问过- 您可能会发现这里的示例代码很有用 在OSX上的Python中似乎没有这样做的方法。今天我遇到了一些解决这个问题的方法,我想我会在这里循环并分享,这样其他人可以节省搜
诅咒
捕捉按键输入,但我不确定鼠标输入。不仅如此,如果我没有弄错的话,它还包含在2.7.2的std库中。这里有一个不使用诅咒的解决方案:
这个问题很久以前在这里被问过-
您可能会发现这里的示例代码很有用 在OSX上的Python中似乎没有这样做的方法。今天我遇到了一些解决这个问题的方法,我想我会在这里循环并分享,这样其他人可以节省搜索时间 用于模拟键盘和鼠标输入的漂亮跨平台解决方案: 我还发现了一个简短但有效的(关于山狮)示例,说明了如何全局记录按键。唯一需要注意的是,您必须使用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
:
例如,NSMouseMovedMask
用于跟踪鼠标移动。
从那里,您可以访问event.locationInWindow()或其他属性 Calvin Cheng,谢谢你。您的建议适用于OS X 10.8.5 代码来自 还有一个解决方案
这里提到的一些软件包支持OSX(例如
键盘):
#!/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)