2

I want to put a bunch of keyboard shortcuts in my app (OS X lion) so I can do most things from the keyboard. There are of course a bunch of lists of hot key combos in use already, including the one in the HIG.

Is there some utility that can be used to type a key combination and find out if it already means something (either globally, or mac standard -- I'm not too worried about reusing some special combo used by another app -- or should I be?)?

4

2 に答える 2

4

Carbon を使用してこれを行うことができます。ここで Carbon を使用することを恐れないでください。この情報を取得する Cocoa の方法はなく、Carbon メソッドは引き続きサポートされています。

このCopySymbolicHotKeys()関数は、[キーボード] 設定ペインで定義されたシステム全体のシンボリック ホット キーに関する情報を含む辞書の配列を返します。各ディクショナリには、1 つのホット キーに関する情報が含まれています。

具体的には、各ディクショナリには次の 3 つのキーがあります。

  • kHISymbolicHotKeyCode: として表される、ホット キーの仮想キー コードCFNumber
  • kHISymbolicHotKeyModifiers: として表される、ホット キーのキーボード修飾子CFNumber
  • kHISymbolicHotKeyEnabled: として表される、ホット キーの有効な状態CFBoolean

明らかに、これらは生のキー コードであるため、キー コードが実際に何を参照しているかを確認したい場合は、何らかの作業を行う必要があります。

配列にはカスタムのアプリケーション固有のホットキーが含まれていないことに注意してください。ただし、これは小さな問題です。

簡単な例を次に示します。

#import <Carbon/Carbon.h>
CFArrayRef registeredHotKeys;


if(CopySymbolicHotKeys(&registeredHotKeys) == noErr)
{
    CFIndex count = CFArrayGetCount(registeredHotKeys);
    for(CFIndex i = 0; i < count; i++)
    {
        CFDictionaryRef hotKeyInfo = CFArrayGetValueAtIndex(registeredHotKeys, i);

        CFNumberRef hotKeyCode = CFDictionaryGetValue(hotKeyInfo, kHISymbolicHotKeyCode);
        CFNumberRef hotKeyModifiers = CFDictionaryGetValue(hotKeyInfo, kHISymbolicHotKeyModifiers);
        CFBooleanRef hotKeyEnabled = CFDictionaryGetValue(hotKeyInfo, kHISymbolicHotKeyEnabled);

        NSLog(@"key code: %@ modifiers: %@ enabled: %@", hotKeyCode, hotKeyModifiers, hotKeyEnabled);

    }

    //you MUST release the dictionary when finished with it
    CFRelease(registeredHotKeys);
}

プロジェクト設定のLink Binary with Librariesビルド フェーズにCarbon フレームワークを追加する必要があることに注意してください。

詳細については、Carbon Event Manager ドキュメント(11Mb PDF) を参照してください。

于 2012-04-18T00:55:28.880 に答える
1

Thear はグローバル キーボード ショートカットを取得するための Carbon の API でしたが、このための Cocoa API はないと思います。他のサードパーティ製アプリについて心配する必要はないと思いますが、http://support.apple.com/kb/HT1343を参照し、それらを回避するためのハードコードを参照してください。助けてくれる彼。

于 2012-04-18T00:53:28.047 に答える