我想在Python中为OSX写一个简单的宏记录器 - 当脚本在后台运行并重播它们时,它可以捕获鼠标和键盘事件。后者可以使用autopy,前者有没有类似的简单库?我可以使用Python捕获OSX中的键盘和鼠标事件吗?
回答
在OSX上似乎没有办法在Python上这样做。
我知道你可以使用curses
来捕获按键输入,但我不确定鼠标输入。不仅如此,但如果我没有把它误认为包含在2.7.2的std库中。
这里有一个解决方案,而无需使用curses
:
http://docs.python.org/faq/library.html#how-do-i-get-a-single-keypress-at-a-time
这个问题被问了一些时间回到这里 - Python cross-platform listening for keypresses?
您可能会发现样本代码有帮助!
今天我遇到了这个问题的几个解决方案,并认为我会回过头来分享一下,这样其他人可以节省搜索时间。
模拟键盘和鼠标输入一个漂亮的跨平台解决方案:http://www.autopy.org/
我也发现了如何在全球范围内记录击键简短而工作(由于山狮)的例子。唯一的警告是你必须使用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
工程跟踪鼠标移动。 从那里,你可以访问event.locationInWindow()或其他属性。
Calvin Cheng,谢谢。你的建议适用于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)
还有一个解决方案 Key Listeners in python?
- 1. 在Ubuntu中使用Python获得的鼠标和键盘事件
- 2. 我可以捕获Windows Mobile PIE键盘事件吗?
- 3. 同时捕获鼠标和键盘事件
- 4. 我们可以使用arduino.getKey()获取键盘事件吗?
- 5. 如何使用UIAutomation获取鼠标和键盘事件
- 6. 如何以我的应用程序捕捉键盘/鼠标事件为焦点?
- 7. 发送鼠标和键盘事件
- 8. 如何捕捉键盘和鼠标事件?
- 9. 捕获鼠标事件在Python
- 10. 我可以将按键映射到鼠标事件吗?
- 11. 防止在所有浏览器的div内捕获鼠标和键盘事件
- 12. 捕获任何工具上的键盘和鼠标事件通过java库
- 13. 捕获鼠标事件
- 14. wxpython捕获wx.Frame中的键盘事件
- 15. SDL使用现代OpenGL导航的键盘和鼠标事件
- 16. 如何在同一时间捕获键盘和鼠标事件AS3
- 17. 鼠标捕获后Silverlight鼠标事件丢失了吗?
- 18. 在C中捕获和发送键盘/鼠标输入#
- 19. 禁用TComboBox中的鼠标滚轮和键盘事件
- 20. 在linux上使用C跟踪键盘和鼠标事件
- 21. PCL展台例如:无法获得键盘和鼠标事件
- 22. 我可以捕获Capslock/Shift键吗?
- 23. 禁用键盘和鼠标
- 24. NSDockTile可以接受鼠标事件吗?
- 25. 捕获backspace的键盘事件
- 26. 在C(linux)中捕获鼠标事件
- 27. 我可以在不激活任何窗口的情况下收听键盘和鼠标事件吗?
- 28. 在vim中,鼠标可以比键盘更有效吗?
- 29. 查找键盘事件设备,鼠标
- 30. 我们可以使元素(div)对鼠标事件透明吗?
这里所提到的一些包有OS X的支持(例如'keyboard'):https://stackoverflow.com/questions/11918999/key -listeners合蟒/ – 2017-10-28 20:05:36