使用 C# 和 Xamarin 按下 F8(播放)按钮后阻止 iTunes / Music.app 启动

Posted

技术标签:

【中文标题】使用 C# 和 Xamarin 按下 F8(播放)按钮后阻止 iTunes / Music.app 启动【英文标题】:Prevent iTunes / Music.app Start After Pressing F8(Play) Button with C# & Xamarin 【发布时间】:2020-03-09 04:15:30 【问题描述】:

我们知道,如果我们按下 F8(播放)键盘按钮,iTunes 或 Music .app 在 macOS 上默认打开。一些 Swift 类可用于阻止此键盘快捷键,但它们与 C# 和 Xamarin 不兼容。例如,Spotify macOS 应用程序具有此能力。如果您在 UI 上按下播放按钮一次,它将控制 iTunes 并处理“播放”按钮键事件。

我有这个代码块。但是,由于 iTunes,macOS 无法触发代码块。其他键(如字母和数字)正常工作:

private NSEvent KeyboardEventHandler(NSEvent theEvent)
    


        ushort keyCode = theEvent.KeyCode;


        if(keyCode== 100) //rbKeyF8 100 is play button.
        
            switch (isplaying)

            
                case true:
                    StopMusic();
                    break;
                case false:
                    PlayMusic();
                    break;
            
        
        //    NSAlert a = new NSAlert()
        //
        //    AlertStyle = NSAlertStyle.Informational,
        //    InformativeText = "You press the " + keyCode + " button :)",
        //    MessageText = "Hi"

        //;
        //a.RunModal();

        return theEvent;
    

我们如何用 C# 做到这一点?谢谢。

【问题讨论】:

您需要在您的 NSApplication 类中覆盖 SendEvent 并捕获(和处理)任何 NSEvent.SystemDefined 事件并确定按下了哪些媒体键等...我没有我的 Xamarin .Mac 代码很方便,但我最初转换了一些 Swift 代码,最后还查看了 SPMediaKeyTap 的 ObjC 代码(在 Github 上)。 我无法在 AppDelegate.cs 和 ViewController.cs 中覆盖 SendEvent。我会在哪里覆盖它?谢谢@SushiHangover 【参考方案1】:

答案是: 注册一个新的子类

[Register ("App")]
public class App : NSApplication

    public App (System.IntPtr p) : base (p)
    

    

    public override void SendEvent (NSEvent theEvent)
    
        base.SendEvent (theEvent);
    

在 Info.plist 中更改 PrincipalClass

<key>NSPrincipalClass</key>
<string>App</string>

并且需要继承 NSApplication 并查看 sendEvent。您应该将 Swift 代码转换为 C#。相关的快速代码在这里: Make my Cocoa app respond to the keyboard play/pause key?

现在,我有另一个问题。是的,这个代码块解决了我的问题 第一部分。现在我的应用程序响应播放按钮按下。然而,iTunes 在我的应用响应后打开。如何防止它打开?

【讨论】:

如果 iTunes 在 app,s 响应后打开,我认为它们会产生一些冲突,Mac 会优先 iTunes 控制。为避免与 iTunes 快捷方式相同的冲突,您可以尝试其他快捷方式(F6 或组合快捷方式)。

以上是关于使用 C# 和 Xamarin 按下 F8(播放)按钮后阻止 iTunes / Music.app 启动的主要内容,如果未能解决你的问题,请参考以下文章

如何让 UIView / Menu 滑入和滑出? (使用 C# 而不是 Swift 的 Xamarin IOS)

如何使用 Xamarin 表单和 C# 将 Html 数据从网站保存到文本文件

在 xamarin.forms 中使用 c# 的长按检测器

按下键时播放音调C#

同时播放两个声音c#

在 C# 中的 keydown 上播放键值