- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我实际上正在使用 pyHook,但我也想为 OS X 编写程序。如果有人知道这样的模块......我已经在互联网上寻找了一段时间,但没有什么真正相关的。
-> 这个想法是为了能够在 python 应用程序之外记录击键。我的应用程序是一个社区统计生成器,所以如果也有来自 OS X 的统计信息会很棒。
提前致谢;)
编辑:PyHook:在 python 应用程序之外记录击键和其他内容 http://sourceforge.net/apps/mediawiki/pyhook/index.php?title=PyHook_Tutorialhttp://pyhook.sourceforge.net/doc_1.5.0/ http://sourceforge.net/apps/mediawiki/pyhook/index.php?title=Main_Page
最佳答案
据我所知,没有用于此的 Python 库,因此您将调用 native API。好消息是 PyObjC(在最近的操作系统版本中内置了 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)
与 Quartz 事件大致处于同一级别的另一个选项是 Carbon 事件(从 InstallEventHandler 开始)。然而,Carbon 已经过时,除此之外,它更难从 Python 获取,因此除非您有某些特定原因,否则不要这样做。
还有一些其他方法可以达到相同的目的——例如,使用 DYLD_INSERT_LIBRARIES 或 SIMBL 将一些代码插入到每个应用程序中——但我想不出还有什么可以用纯 Python 完成的。
关于python - 类似于 OS X 上的 pyHook,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10994750/
我正在尝试在 pycharm 中安装 pyHook 包,但出现标题错误。我已经使用 pip install pyHook-1.5.1-cp37-cp37m-win_amd64.whl 在 cmd 中成
我正在使用 pyhook 和 pyhk 来映射 Windows XP 机器上的击键,它工作正常,除非击键(例如,ctrl+z)已经存在于应用程序中。在这种情况下,ctrl+z 将传递给应用程序并触发已
我运行了这个 PyHook 示例代码: import pythoncom, pyHook def OnKeyboardEvent(event): print 'MessageName:
这是我在这个网站上的第一个问题,所以我希望我的格式正确。我对编程也很陌生,所以请原谅我缺乏知识,谢谢! 我正在尝试像这样安装 pyHook,但我不断收到此错误消息: C:\Python27>py -2
我是 cx_Freeze 的新手,但是当我尝试使用 pyHooks 时,它不起作用。这是我的 setup.py 代码: from cx_Freeze import setup, Executable
我为键盘记录器创建了一个线程,该线程与另一个产生一些声音的线程并行记录(我想捕捉 react 时间)。 不幸的是,尽管我调用了 killKey() 并打印了“invoked killkey()”,但线
我安装了pyHook并成功将处理程序附加到键盘事件,但现在我需要查明用户是否正在使用英文布局或其他布局进行键入。我在事件对象中找不到此信息。 如何在 Windows 上找到焦点窗口中的输入语言?我尝试
我正在尝试制作一个简单的程序来记录所有击键,但我很难弄清楚如何让它工作。我似乎无法在任何地方找到这个问题的解决方案。 我正在使用 pyHook 来获取击键,并且创建了一个名为 OnKeyboardEv
我正在尝试在 python 中使用 pyhook 创建一个全局热键,它应该只在按下 alt 键时工作。 这是来源: import pyHook import pythoncom hm = pyHook
我有一个程序可以使用 pyHook 捕获所有按键,然后运行一些函数。 我注意到一段时间后(随机持续时间),程序停止接收按键触发,即使我正在按键? pyHook不稳定吗? 我不会更改按下的键或过早按下它
这里确实有更多问题。基于pyHook's tutorial ,函数中的 .HookManager().OnMouseEvent 事件变量具有 .Injected 属性。我没找到相关信息,有谁知道这是什
import win32api import win32console import win32gui import pythoncom, pyHook , sys, time , os , thre
我正在尝试下载 pyHook 模块以完成学校作业。我尝试寻找问题的答案,但还没有找到。当我尝试 pip install python-pyHook 时,我得到以下信息: pip install pyt
我正在使用 teamplayer ,它可以让您将更多鼠标连接到您的计算机以同时使用。我还使用 pyHook 来捕获鼠标事件,代码如下: import pyHook import pythoncom d
我一直在用 Python 编写一个基本的键盘记录器。在检查我的日志时,我发现我使用 event.Time 记录的时间戳不是 Unix 时间戳。它是什么类型的时间戳,如何将其转换为可读格式? impor
我编写了一个脚本,使用 pyHook 按下按键时移动鼠标。问题是,在 6 个按键事件之后,脚本停止拾取按键,需要从任务管理器结束。 我在 Windows 7 机器上使用 python 2.7。我还没有
我想检查我写入 key 的文件是否超过 2Kb 。如果它超过 2KB,那么我需要创建另一个文件并停止在这个文件中写入。我是 python 初学者请帮助我。请指出在哪里可以使用代码来检查文件是否超过 2
我有一个 Tkinter GUI 应用程序,需要在按下按钮时隐藏它。我不能假设应用程序将具有焦点,因此我实现了键盘记录器样式的 pyHook。但是,每当我从 pyHook 启动的函数调用withdra
我希望我的 (Python/Windows) GUI GTK 窗口在按键时关闭。然而,没有任何反应。我是初学者,我在谷歌中寻找答案。我的英语也不是很专业。请耐心等待我。 import pygtk im
这是我的脚本: import pyHook import pythoncom hookManager = pyHook.HookManager() def onKeyboardEvent(event)
我是一名优秀的程序员,十分优秀!