2013-05-12 46 views
0

我相信大多數人都熟悉阿爾弗雷德,這個令人敬畏的任務啓動器。我想知道的是,Alfred如何檢測到我正按Command-Shift-Space來啓動其UI?它重寫`keyDown'還是完全不同的東西?Mac OSX從MenuBar應用程序捕獲所有按鍵

我見過的每篇文章都談到了覆蓋keyDown,但從我的理解來看,覆蓋必須是視圖的一部分。阿爾弗雷德如何做到這一點,而沒有提出一個觀點,只有頂部的菜單欄圖標?

回答

0

您可以使用NSEvent來監視全局按鍵。

您還可以創建一個全局事件監視器,該監視器允許您監視其他應用程序中的事件,儘管您無法更改這些事件。

具體來說,看看addGlobalMonitorForEventsMatchingMask:handler:,它安裝了一個事件監視器,該監視器接收發布到其他應用程序的事件的副本。

+ (id)addGlobalMonitorForEventsMatchingMask:(NSEventMask)mask handler:(void (^)(NSEvent*))block 

活動以異步方式發送到您的應用程序,你只能觀察到的事件;您無法修改或以其他方式阻止將事件傳遞到其原始目標應用程序。

只有在啓用輔助功能或您的應用程序可信訪問權限(請參閱AXIsProcessTrusted)時,才能監視與密鑰相關的事件。

如果您確實想要阻止或修改事件,您應該查看CGEvent

0

我不知道阿爾弗雷德是否需要它被信任可訪問性訪問,或者如果你願意要求你自己的應用程序。

無論採用哪種方式,您都可以使用舊的Carbon熱鍵API,而不是使用-[NSEvent addGlobalMonitorForEventsMatchingMask:...]或事件接口。它仍然沒有被廢棄,即使其餘大部分碳都是。見RegisterEventHotKey()