3
在OSX特立獨行的,我有這個PyObjC(python3.3)基於簡單的APPPyObjC應用程序不允許訪問的輔助功能API
test.py
class MyDelegate(NSObject):
def applicationDidFinishLaunching_(self, sender):
NSEvent.addGlobalMonitorForEventsMatchingMask_handler_(NSKeyDownMask, lambda event: NSLog("hello"))
NSApp.activateIgnoringOtherApps_(YES)
delegate = MyDelegate.alloc().init()
app = NSApplication.sharedApplication()
app.setDelegate_(delegate)
menu = NSMenu.alloc().initWithTitle_("My Menu")
app.setMainMenu_(menu)
window = NSWindow.alloc().initWithContentRect_styleMask_backing_defer_(
NSMakeRect(0, 0, 100, 100),
NSTitledWindowMask,
NSBackingStoreBuffered,
NO
)
window.setTitle_("my app")
window.makeKeyAndOrderFront_(None)
windowController = NSWindowController.alloc().initWithWindow_(window)
AppHelper.runEventLoop()
與
python3 test.py
運行它,並給無障礙訪問系統預置中的終端 - >隱私&安全 - >輔助功能
我可以看到全局監視器的工作原理。
然後,我cx_Freeze凍結了
python3 setup.py bdist_mac
結束了
build/Test.app
與
open build/Test.app
我看到錯誤的OSX系統日誌
universalAccessAuthWarn[546]: AccessibilityAPI: pid 3809, is not allowed to access the accessibility API. Path: /path/to/build/Test.app/Contents/MacOS/test
我已在「系統偏好設置」 - >「隱私&安全性」 - >「輔助功能」中啓用了對「測試」的訪問權限,該功能無效。
我在這裏錯過了什麼?
更新: 可能是cx_Freeze的問題,使用py2app(0.8)使全局事件監視器工作。感謝羅納德Oussoren的提示(請參閱下面的回答&評論)。
謝謝。我很感興趣,你是如何在py2pp構建之後啓動應用程序的。你是雙擊它還是使用「打開」命令?它也適用於我(使用cx_Freeze),如果我直接從命令行直接執行應用程序可執行文件,而不是當我啓動.app本身。 – Shawn
我使用「open」啓動了應用程序。 –
我之前在OSX Maverick上使用python3安裝了py2app,並在第一次嘗試構建時遇到了問題:error:No such file or directory:/usr/local/lib/python3.3/site-packages/setuptools-2.1- py3.3.egg/_markerlib/__ init __。pyc我不知道目前是否已修復此問題。我以前沒有設法解決,所以我切換到cx_Freeze。 – Shawn