Car*_*to_ 4 python macos keylogger pyhook
我实际上正在使用pyHook,但我也想为OS X编写程序.如果有人知道这样的模块......我已经在网上看了一段时间,但没有什么真正相关的.
- >想法是能够在python应用程序之外记录击键.我的应用程序是社区统计信息构建器,因此从OS X获取统计信息也很棒.
提前致谢 ;)
编辑:PyHook:在python应用程序之外记录击键和其他内容 http://sourceforge.net/apps/mediawiki/pyhook/index.php?title=PyHook_Tutorial http://pyhook.sourceforge.net/doc_1.5.0/ http: //sourceforge.net/apps/mediawiki/pyhook/index.php?title=Main_Page
据我所知,没有Python库,因此您将调用本机API.好消息是PyObjC(在最近的OS版本中附带了内置的Python)经常使这很容易.
有两个主要选择.要使其中任何一个工作,你的应用程序必须有一个Cocoa/CoreFoundation runloop(就像在Windows中一样,很多东西要求你成为"Windows GUI可执行文件"而不是"命令行可执行文件"),我赢了解释怎么做这里.(如果你不知道怎么做,找一个用Python构建GUI应用程序的好教程,因为这是最简单的方法.)
简单的选择是Cocoa全局事件监视器API.但是,它有一些主要的局限性.您只能获取转到另一个应用程序的事件 - 这意味着媒体密钥,全局热键以及因任何原因而忽略的密钥都不会显示.此外,您需要"信任可访问性".(最简单的方法是要求用户在"系统偏好设置"的"通用访问"面板中全局启用它.)
硬选项是Quartz事件抽头API.它更加灵活,它只需要恰当的权限(根据您使用的设置,可能包括信任可访问性和/或以root身份运行),并且它的功能更强大,但需要很多更多的工作要开始,如果你弄错了就可能搞砸你的系统(例如,通过吃所有击键和鼠标事件,所以他们永远不会进入操作系统,除了电源按钮你不能重启).
有关所有相关功能的参考,请参阅https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/nsevent_Class/Reference/Reference.html(对于NSEvent)和https:/ /developer.apple.com/library/mac/#documentation/Carbon/Reference/QuartzEventServicesRef/Reference/reference.html(适用于Quartz事件).一些谷歌搜索应该在Objective C(对于NSEvent)或C(对于CGEventTap)中提供大量示例代码,但在Python中很少或没有,所以我将展示一些小片段,说明你如何移植样本到Python:
import Cocoa
def evthandler(event):
pass # this is where you do stuff; see NSEvent documentation for event
observer = Cocoa.NSEvent.addGlobalMonitorForEventsMatchingMask_handler_(NSKeyDown, evthandler)
# when you're done
Cocoa.NSEvent.removeMonitor_(observer)
import Quartz
def evthandler(proxy, type, event, refcon):
pass # Here's where you do your stuff; see CGEventTapCallback
return event
source = Quartz.CGEventSourceCreate(Quartz.kCGEventSourceStateHIDSystemState)
tap = Quartz.CGEventTapCreate(Quartz.kCGSessionEventTap,
Quartz.kCGHeadInsertEventTap,
Quartz.kCGEventTapOptionListenOnly,
(Quartz.CGEventMaskBit(Quartz.kCGEventKeyDown) |
Quartz.CGEventMaskBit(Quartz.kCGEventKeyUp)),
handler,
refcon)
Run Code Online (Sandbox Code Playgroud)
另一个与Quartz事件大致相同的选项是Carbon事件(从InstallEventHandler开始).然而,Carbon已经过时,而且最重要的是,从Python中获取它是比较困难的,所以除非你有一些特定的理由这样做,否则不要.
还有其他一些方法可以达到相同的目的 - 例如,使用DYLD_INSERT_LIBRARIES或SIMBL将一些代码插入到每个应用程序中 - 但我想不出任何其他可以在纯Python中完成的事情.
| 归档时间: |
|
| 查看次数: |
5837 次 |
| 最近记录: |