2012-06-09 58 views
4

我需要讀取MAC OS中最前面的應用程序的所有快捷方式。 Cocoa中是否有API或類,Objective-c提供了這種API?Macos x應用程序的快捷方式

+0

你說的快捷鍵是什麼意思?你能更詳細地解釋你想要做什麼嗎? – user1118321

+0

沒問題。我給你一個例子。讓我們說應用程序Safari是活躍的。我想要做的是讀取所有註冊此應用程序的快捷鍵/熱鍵。也許有一個文件或一個方法,我可以讀這個? – Togo

+1

查看[Accessibility框架](https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Accessibility/cocoaAXIntro/cocoaAXintro.html#//apple_ref/doc/uid/10000118i) 。它應該爲您提供一種訪問正在運行的應用程序的菜單的方法,這可能允許您讀取項目分配的密鑰。 –

回答

7

Accessibility API是你需要的。不幸的是,這是相當複雜的,最好通讀UIElementInspector source code以瞭解它的使用方法,以及Accessibility Programming Guidelines for Mac中與輔助應用相關的部分。

你想要什麼會需要一點點的代碼,所以我只是概述步驟。

  1. 使用[[NSWorkspace sharedWorkspace] runningApplications]獲得的應用程序的列表,並得到其active屬性爲YES應用。
  2. 使用NSRunningApplicationprocessIdentifier屬性獲取該應用程序的PID。
  3. 現在,我們得到輔助功能,通過Application Services API
  4. 訪問創建代表使用AXUIElementCreateApplication活動的應用程序,這需要pid作爲參數的AXUIElement。
  5. 現在你有一個AXUIElementApplication角色,或者AXApplication僞類。您需要繼續執行元素AXApplicationAXMenuBarAXMenuBarItemAXMenuItem的層次結構。請注意,AXMenuItems可以在其下嵌套其他AXMenuItems
  6. 要遍歷層次結構,請使用AXUIElementCopyAttributeValues來獲取kAXChildrenAttribute的值。這將返回一組兒童AXUIElements
  7. 最後,當您到達AXMenuItem元素時,請檢查其實際快捷方式的菜單項Cmd Char,Glyph,Modifiers和Virtual Key屬性。屬性名稱的常量,如kAXMenuItemCmdCharAttribute,列出了here
+0

謝謝木香。我已經按照您所描述的方式完成了這項工作。該應用程序在第一個版本發佈了看看它:https://github.com/Togo/eve – Togo

+0

@Togo哇,我真的很晚,然後遊戲。真高興你做到了!雖然這是一個好主意,發佈自己的答案,並接受它的問題沒有像這樣回答,爲社會的利益:) – Yunchi

0

不是要競爭@woody :)

但是我發現這一點,它可以幫助過:

UI Browser

相關問題