1

過去2日間、私は非常に単純なはずの何かについて多くのことを検索して読んでいます。そうではないことが明らかになりました:私はこれを作ろうとしています:

IBの主要な同等のフィールド

それで全部です。ショートカットレコーダーはかなり古いことを知っており、MASShortcutのデモを使用しています。MASShortcutはかなり素晴らしいですが、一見簡単そうに見える何かのためのコードがたくさんあります。

私はまた、多くのAppleサンプルコードを検索しました(Interface Builder以外の場所でこれを実装することを望んでいますが、今のところ運がありません)。

これにより、次の質問が残ります。

-このようなもののいくつかを明確にすることができるドキュメントはありますか?または、MASShortcut以外のより単純なソリューションはありますか?

-IBコントロールのようなものを自分で複製しようとしていますが、押されたキーをNSTextFieldの文字に「変換」することに固執しています(またはIBのカスタムNSViewですか?)。Appleはこれを行う簡単な方法を提供していますか?sendEventですべてをキャッチし、それをすべてのキーのリストと比較するのは大変な作業のように思われるため、Appleプログラマーは上記のコントロールでどのようにそれを行ったのだろうか。それが唯一の解決策である必要がありますが、使用するときに気にする必要のあるさまざまなキーボードレイアウトはありますか?

-他のアプリケーションがこれをどのように実装して、ここに表示されるようにしますか? システム環境設定>キーボード

ここにTextWranglersが表示されているのがわかりますが、アプリケーションで「[NSEvent addGlobalMonitorForEventsMatchingMask:]」を呼び出すと、自動的に発生しますか?

これらはたくさんの質問です、私はあなたたちの一人が私を正しい方向に向けることができることを願っています。

よろしくお願いします、フラン

4

1 に答える 1

3

私は先週、自分でキーを押すことで文字を取得するのをいじっていましたが、何らかの理由でこれまで見たことのない2つの関数UCKeyTranslate()に出くわしました。CoreServicesとApplicationServicesの明らかに関連するCGEventKeyboardGetUnicodeString()(前者のラッパーのように見える)関数です。

これらは、Apple独自のテキストシステムがキーの押下をテキストとして表示するためのUnicode文字列に変換するために使用している関数(または少なくともコードを通過する)のようです。

修飾キーの状態を⌥⇧⌘のような文字列に変換するには、 NSEvent「s」を簡単に調べるだけで十分です。modifierFlags

NSUInteger flags = [theEvent modifierFlags];
NSString * modString = [NSString stringWithFormat:@"%@%@%@%@",
                                (flags & NSControlKeyMask) ? @"^" : @"",
                                (flags & NSAlternateKeyMask) ? @"⌥" : @"",
                                (flags & NSShiftKeyMask) ? @"⇧" : @"",
                                (flags & NSCommandKeyMask) ? @"⌘" : @""];

また、Allan Odgaardのブログ投稿「DecipheringanNSEvent」で、押されているキーを決定するために彼が開発したヒューリスティックについても確認することをお勧めします。

于 2013-02-09T19:55:12.727 に答える