如何检索当前接收按键事件的 OSX 应用程序

2024-02-01

我正在关注可可文档 https://developer.apple.com/library/mac/documentation/cocoa/reference/applicationkit/classes/nsworkspace_class/reference/reference.html#//apple_ref/occ/instm/NSWorkspace/frontmostApplication确定当前最前面的应用程序在 OSX 中 - 又名接收按键事件的应用程序。 然而,当我执行以下 swift 时,API 总是返回相同的值 -XCode,但它永远不会改变为chrome或任何其他应用程序,当我切换到它们时。我也尝试执行编译后的程序,但不是不断显示XCode它现在显示我正在运行的任何终端应用程序。

确定从 OSX 接收按键事件的应用程序的正确方法是什么?我在这方面的代码有问题吗?

import Cocoa

func getActiveApplication() -> String{
    // Return the localized name of the currently active application
    let ws = NSWorkspace.sharedWorkspace()
    let frontApp = ws.frontmostApplication
    return frontApp.localizedName
}

var frontMostApp : String
while true {
    frontMostApp = getActiveApplication();
    NSLog("front app: %@", frontMostApp)
    sleep(1);
}

该线程有点旧,但非常有帮助。我根据 Marco 的帖子和 uchuugaka 的答案做了一些研究。以下是结果。

// swift 3.0
// compile: xcrun -sdk macosx swiftc -framework Cocoa foo.swift -o foo
// run: ./foo

import Cocoa

class MyObserver: NSObject {
    override init() {
        super.init()
        NSWorkspace.shared().notificationCenter.addObserver(self, 
            selector: #selector(printMe(_:)), 
            name: NSNotification.Name.NSWorkspaceDidActivateApplication, 
            object:nil)
    }
    dynamic private func printMe(_ notification: NSNotification) {
        let app = notification.userInfo!["NSWorkspaceApplicationKey"] as! NSRunningApplication
        print(app.localizedName!)
    }
}
let observer = MyObserver()
RunLoop.main.run()

我是 Cocoa 和 Swift 的新手。我不知道上面的方法是否有效,但它对我有用。我得到了帮助如何在 swift 2 命令行工具中创建最小守护进程? https://stackoverflow.com/questions/31469532/how-to-create-a-minimal-daemon-process-in-a-swift-2-command-line-tool and Swift 3 NSNotificationCenter 键盘将显示/隐藏 https://stackoverflow.com/questions/37825327/swift-3-nsnotificationcenter-keyboardwillshow-hide等等。

Swift 4:

NSWorkspace.shared.notificationCenter.addObserver(self,    // HERE, shared
    selector: #selector(printMe(_:)), 
    name: NSWorkspace.didActivateApplicationNotification,  // HERE
    object:nil)

编辑(斯威夫特 4)

编译器说printMe函数必须是@objc。 (我不知道什么意思,但是当我在前面添加时它起作用了@objc在该行的开头。这是轻松复制粘贴的完整代码。

// swift 4.0
// compile: xcrun -sdk macosx swiftc -framework Cocoa foo.swift -o foo
// run: ./foo

import Cocoa

class MyObserver: NSObject {
    override init() {
        super.init()
        NSWorkspace.shared.notificationCenter.addObserver(self, 
            selector: #selector(printMe(_:)), 
            name: NSWorkspace.didActivateApplicationNotification, 
            object:nil)
    }
    @objc dynamic private func printMe(_ notification: NSNotification) {
        let app = notification.userInfo!["NSWorkspaceApplicationKey"] as! NSRunningApplication
        print(app.localizedName!)
    }
}
let observer = MyObserver()
RunLoop.main.run()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何检索当前接收按键事件的 OSX 应用程序 的相关文章

  • 适用于 iPhone / iPad / iOS 的快速、精益 PDF 查看器 - 提示和提示?

    最近有很多关于绘制 PDF 的问题 是的 您可以使用UIWebView但这无法提供您所期望的优秀 PDF 查看器的性能和功能 您可以绘制PDF页面到 CALayer http www cocoabuilder com archive coc
  • 减少 CoreData 的调试输出?

    我正在开发一个使用 CoreData 的 iOS macOS 项目 它工作正常 但它会向控制台输出大量调试信息 这使得控制台无法使用 因为我的打印语句隐藏在所有与 CoreData 相关的内容中 我有一个非常简单的 CoreData 设置
  • 作为!与 Swift 中 Xcode 6.3 中的 as 运算符对比

    Xcode 6 3 使 Swift 发生了很大变化 我必须更换每个应用程序中的数十个位置as gt as 为什么 现在有什么规则 在 Swift 1 2 之前 as运算符可用于执行两种不同类型的转换 具体取决于要转换的表达式的类型及其要转换
  • 如何让按钮闪烁?

    我试图在扫描正确时将按钮的颜色 只是闪烁 闪烁 更改为绿色 在出现问题时将按钮的颜色更改为红色 我可以用这样的视图来做到这一点 func flashBG UIView animateWithDuration 0 7 animations s
  • Swift 中的 import 语句是否有相关成本?

    阅读字符串宣言 我看到一个段落 https github com apple swift blob master docs StringManifesto md batteries included关于避免Foundation不需要的时候导
  • 在 UIScrollview 上显示缩略图的最佳方法是什么(从服务器下载)

    我想在 UIScrollview 如照片应用程序 上显示许多图像 作为缩略图 所有图像将从服务器下载 据我所知 有几种选择 1 通过创建 UIImageviews 然后将它们添加为主滚动视图上的子视图 2 通过子类化一个UIView类 然后
  • 如何在 NSTextView 中使用 SPACE 而不是 TAB

    我只知道如何修改 NSTextView 中的制表符宽度 NSMutableParagraphStyle paragraphStyle self defaultParagraphStyle mutableCopy paragraphStyle
  • 无法在 ios 应用程序中通过 googlecast 正确投射视频

    我正在开发一个基于 AVPlayer 的自定义视频播放器项目 尝试整合谷歌演员 我已经根据谷歌图进行了集成 https codelabs developers google com codelabs cast videos ios http
  • 如何使用 CNContacts 快速获取手机号码?

    我有一些代码可以检索用户联系人中的所有电话号码 但只想过滤掉手机号码 目前 我只是通过将第一个数字为 或第二个数字为 7 的数字添加到数组中来实现此目的 如下所示 func findContacts gt CNContact let key
  • nlohmann/json 框架中的未知断点

    一段时间以来 当我在启用断点的 Xcode 下运行我的应用程序时 我显然在名为 nlohmann basic json 的系统框架中遇到了一个未知断点 我可以毫无问题地继续执行 但这无论如何都很烦人 知道这个断点的原因是什么 或者更好的是
  • 如何使用 alamofire 通过基本身份验证上传图像?

    我正在尝试使用 alamofire 4 7 1 和此代码上传图像 但说实话 我怀疑我没有编写正确的代码来上传图像 func uploadDefect defectRemark String defectLocation String def
  • 从未调用过交互式委托方法

    我想在 ViewController 1 和 NavigationViewController 2 之间进行交互式转换 NavigationController 通过按钮调用 因此呈现时没有交互转换 它可以通过按钮或 UIPanGestur
  • Xamarin - 错误:dsymutil 退出,代码为 72

    最近升级到 VS for Mac 8 10 21 在构建应用程序时 我得到 Xamarin Shared targets 3 3 Error dsymutil exited with code 72 这是 Xcode 13 3 的情况 完整
  • AVAudioPlayer 无法从网站播放 m4a 或 mp3 文件类型

    我试图在我的应用程序中找到一个仅纯 m4a 声音的 URL 我有音频的 URL 理论上可以下载它 然后 使用下载的文件URL到声音 我尝试使用AVAudioPlayer播放它 但它不播放任何声音 这是我的代码 在 URL 检索函数中 我调用
  • 动态调度协议扩展不适用于多个目标

    这是我的主要目标中的代码 所以不是测试目标 protocol ProtocolA func dontCrash extension ProtocolA func dontCrash fatalError func tryCrash dont
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码
  • 根据内容自动更改单元格高度 - Swift

    在 Swift 中使用 UITableView 有人可以帮我根据标签 图片和描述自动更改单元格的高度吗 所有信息都正确传递 我只需要帮助格式化它 我尝试使用调整它cell frame size height 但这没有效果 我可以更改故事板中
  • iOS7 由 Interface Builder 生成的 NSIBPrototypingLayoutConstraint 自动布局约束问题

    以前在 iOS6 中 我的聊天消息视图控制器使用 IB 中精心构建的自动布局约束正确显示和动画 下面是 Xcode 5 中删除了约束的当前视图层次结构 升级到 XCode 5 和 iOS7 后 我发现我需要清除所有旧的约束才能解决默认的半透
  • 在 Mac 上正确运行基于 SWT 的跨平台 jar

    我一直致力于一个基于 SWT 的项目 该项目旨在部署为 Java Web Start 从而可以在多个平台上使用 到目前为止 我已经成功解决了由于 SWT 依赖的系统特定库而出现的导出问题 请参阅相关thread https stackove
  • 上传存档错误:“缺少 iOS 发行版签名身份......”

    我正在尝试使用 Xcode 将我的 iOS 应用程序存档上传到 iTunes Connect 但是当我单击 上传到 App Store 时 出现错误 Xcode 尝试查找或生成匹配的签名资产并 由于以下问题未能做到这一点 缺少 iOS 为

随机推荐