2

ここで説明されているように、メディア キー イベント (Macbook では Play、Pause、Next、Prev) を受け取るために、NSApplication の sendEvent (C# 用語では SendEvent) メソッドをオーバーライドするために、MonoMac で NSApplication をサブクラス化する必要があります: Mac キーボードの再生/一時停止イベントをリッスンするそしてここ:https ://bitbucket.org/nkreeger/whitedragon/src/6f530c8a34a7/component/sbAppleMediaKeyController.mm

これまでのところ、私はこのコードを思いつきました:

class MainClass
{
    static void Main (string[] args)
    {
        MyApp.Init ();
        MyApp.Main (args);
    }
}
class MyApp : NSApplication
{
    public override void SendEvent (NSEvent theEvent)
    {
        Console.WriteLine ("event received!");
        base.SendEvent (theEvent);
    }
    public override void SetMainMenu (NSMenu aMenu)
    {
        Console.WriteLine ("main menu set!");
        base.SetMainMenu (aMenu);
    }
}

ただし、コンソール出力が得られないため、SendEvent または SetMainMenu (SetMainMenu は起動時に 1 回呼び出す必要があるため、テスト目的で追加しました) は呼び出されません。

これを行う正しい方法は何ですか?

4

1 に答える 1

6

サブクラスをサブクラス化するだけNSApplicationでは、通常のサブクラスを置き換えるには十分ではありません。NSPrincipalClassアプリケーションの plist にも設定する必要があります。

見る:

https://developer.apple.com/library/mac/#documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html

于 2012-08-12T03:52:23.433 に答える