macOS:检测所有应用程序启动,包括后台应用程序?

2023-12-31

这里是新手。我正在尝试为应用程序启动创建一个小型侦听器,并且我已经有了:

// almon.m

#import <Cocoa/Cocoa.h>
#import <stdio.h>
#include <signal.h>

@interface almon: NSObject {}
-(id) init;
-(void) launchedApp: (NSNotification*) notification;
@end

@implementation almon
-(id) init {
  NSNotificationCenter * notify
    = [[NSWorkspace sharedWorkspace] notificationCenter];

  [notify addObserver: self
          selector:    @selector(launchedApp:)
          name:        @"NSWorkspaceWillLaunchApplicationNotification"
          object:      nil
  ];
  fprintf(stderr,"Listening...\n");
  [[NSRunLoop currentRunLoop] run];
  fprintf(stderr,"Stopping...\n");
  return self;
}

-(void) launchedApp: (NSNotification*) notification {
  NSDictionary *userInfo = [notification userInfo]; // read full application launch info
  NSString* AppPID = [userInfo objectForKey:@"NSApplicationProcessIdentifier"]; // parse for AppPID
  int killPID = [AppPID intValue]; // define integer from NSString
  kill((killPID), SIGSTOP); // interrupt app launch
  NSString* AppPath = [userInfo objectForKey:@"NSApplicationPath"]; // read application path
  NSString* AppBundleID = [userInfo objectForKey:@"NSApplicationBundleIdentifier"]; // read BundleID
  NSString* AppName = [userInfo objectForKey:@"NSApplicationName"]; // read AppName
  NSLog(@":::%@:::%@:::%@:::%@", AppPID, AppPath, AppBundleID, AppName);
}
@end

int main( int argc, char ** argv) {
  [[almon alloc] init];
  return 0;
}
// build: gcc -Wall almon.m -o almon -lobjc -framework Cocoa
// run: ./almon

注意:当我构建它时,它会运行良好,但如果你在 High Sierra 上使用 Xcode 10 进行构建,你会得到ld但是,您可以忽略警告。

我的问题:有没有办法也检测到启动后台应用程序,例如像粘度等菜单栏应用程序?苹果是这么说的

系统不发帖 [NSWorkspaceWillLaunchApplicationNotification] 用于后台应用程序或 对于具有以下功能的应用程序LSUIElement关键在他们的Info.plist文件。 如果您想知道所有应用程序(包括后台应用程序)何时 启动或终止,使用键值观察来监控值 由返回runningApplications method.

Here: https://developer.apple.com/documentation/appkit/nsworkspacewilllaunchapplicationnotification?language=objc https://developer.apple.com/documentation/appkit/nsworkspacewilllaunchapplicationnotification?language=objc

我至少会尝试向侦听器添加对后台应用程序等的支持,但我不知道如何去做。有任何想法吗?


正如文档所建议的,您可以使用键值观察来观察runningApplications共享工作区对象的属性:

static const void *kMyKVOContext = (void*)&kMyKVOContext;


[[NSWorkspace sharedWorkspace] addObserver:self
                                forKeyPath:@"runningApplications"
                                   options:NSKeyValueObservingOptionNew // maybe | NSKeyValueObservingOptionInitial
                                   context:kMyKVOContext];

然后,您将实现观察方法(使用 Xcode 的现成代码片段):

- (void) observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object change:(NSDictionary*)change context:(void*)context
{
    if (context != kMyKVOContext)
    {
        [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
        return;
    }

    if ([keyPath isEqualToString:@"runningApplications"])
    {
        <#code to be executed when runningApplications has changed#>
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

macOS:检测所有应用程序启动,包括后台应用程序? 的相关文章

  • 我如何在 viewDidLoad 中执行 UIView animateWithDuration ? IOS 7

    我在 viewDidAppear 中尝试这个 但我有一秒钟的延迟 我能做什么 在 viewDidLoad 中工作 void viewDidAppear BOOL animated fullRotation CABasicAnimation
  • 根据一个属性对数组进行排序[重复]

    这个问题在这里已经有答案了 我有一个名为 NSMutableArrayallItems其中有以下内容ProductData目的 每个对象都有cid cname ctype and cimage 正如您在下面看到的 json 对象没有按顺序出
  • 如何在 UITableView 中显示零行的表格

    我正在动态地将内容加载到 UITableView 中 如果有数据 表格需要显示数据 如果没有数据 表格应显示普通页面 但在我的应用程序中 表格显示带有两条分隔线的普通页面 我需要删除此分隔线并显示纯白色页面 请建议 任何帮助 将不胜感激 如
  • 如何将 NSSecureCoding 与 id 对象一起使用

    我正在创建一个链接列表并使用容器对对象 下一个和上一个属性进行分组 就像基金会收藏一样 我希望它能够实现NSSecureCoding 这是声明 interface ListContainer NSObject
  • NSCFData isRessized 崩溃?

    我目前在控制台中收到此崩溃日志 2011 08 23 19 18 40 064 App 1697 707 NSCFData isResizable unrecognized selector sent to instance 0x11f1c
  • 是否可以扩展现有的 Objective-C 块?

    我有一个使用标头中定义的块的类 如下所示 property readwrite copy RequestSucceededBlock succeededBlock 该物业succeededBlock已经设置了一个块 有没有办法用另一个仍然调
  • 如何将图像放入此 UIPickerView 中?

    我不知道如何创建一个在文本一侧带有图像的自定义 UIPickerView 我一直在寻找一种方法 我刚刚发现了这个 UIView pickerView UIPickerView pickerView viewForRow NSInteger
  • 使用 NSString 进行 UTF8 解码

    我是 Objective C 新手 尝试使用以下示例将格式错误的 UTF8 编码 NSString 转换为格式良好的字符串苹果文档 http developer apple com library mac documentation Coc
  • 每 24 小时触发一次方法

    我正在尝试每天在给定时间触发一个方法 我尝试了一些方法 但我无法真正使其发挥作用 任何意见 将不胜感激 此外 如果无论应用程序是否打开它都会触发 那就更理想了 这可能吗 UI本地通知 http developer apple com lib
  • (Kiss)XML xpath 和默认命名空间

    我正在开发一个 iPhone 项目 需要解析一些 xml xml 可能包含也可能不包含默认名称空间 我需要知道如何解析 xml 以防它使用默认命名空间 由于我需要读取和写入 xml 因此我倾向于使用 KissXML 但我愿意接受建议 这是我
  • iOS:生成pdf时绘制文本时如何设置字体?

    我在ios应用程序中使用drawpdf函数生成pdf 同时调用nsobject类中的drawtext函数 它根据我指定的框架和字符串清楚地绘制文本 我的代码是 void drawText NSString textToDraw inFram
  • Objective-C NSString for 循环与characterAtIndex

    我试图逐个字符地循环遍历 NSString 但出现 EXC BAD ACCESS 错误 您知道如何正确执行此操作吗 我已经在谷歌上搜索了几个小时但无法弄清楚 这是我的代码 m self textLength self text length
  • 调整 UIImage 的大小而不将其完全加载到内存中?

    我正在开发一个应用程序 用户可以在其中尝试加载非常非常大的图像 这些图像首先在表格视图中显示为缩略图 我的原始代码会在大图像上崩溃 因此我重写它以首先将图像直接下载到磁盘 是否有一种已知的方法可以调整磁盘上图像的大小 而无需通过以下方式将其
  • “预期的 ';'在 Swift 下的顶级声明符之后”

    我正在尝试将所有颜色设置在一个 Swift 文件中 该文件可以在我的整个应用程序中使用 下面的代码会导致 import Foundation import UIKit class DotColors let tsblueColor UICo
  • iPhone:UIApplication WillResignActiveNotification 从未被调用

    我正在视图控制器中播放视频 当用户按下硬件主页按钮并且当前正在播放视频时 应用程序崩溃并显示EXC BAD ACCESS在模拟器中 我读到我应该使用applicationWillResignActive停止视频播放的消息应该可以解决崩溃问题
  • 在实例化对象之前是否可以检查故事板中是否存在标识符?

    在我的代码中我有这一行 但我想知道是否有办法检查是否 一些控制器 在我将它与 一起使用之前就存在实例化ViewControllerWithIdentifier 方法 如果标识符不存在 则应用程序崩溃 如果没有好的方法 这并不是一个大问题 我
  • 如果我使用自定义 UITableViewCell,是否需要设置 heightForRowAtIndexPath?

    如果我使用自定义 UITableViewCell 是否需要设置 heightForRowAtIndexPath 在我的 NIB 中 我已经设置了单元高度 当我覆盖 heightForRowAtIndexPath 时 单元格的内容不会出现 即
  • 如何在 UICollectionView 中将行居中?

    我有一个UICollectionView与随机细胞 有什么方法可以让我将行居中吗 默认情况下它是这样的 x x x x x x x x x x x x x x 这是所需的布局 x x x x x x x x x x x x 我必须做这样的事
  • 如何将Python3设置为Mac上的默认Python版本?

    有没有办法将 Python 3 8 3 设置为 macOS Catalina 版本 10 15 2 上的默认 Python 版本 我已经完成的步骤 看看它安装在哪里 ls l usr local bin python 我得到的输出是这样的
  • ios - 如何声明静态变量? [复制]

    这个问题在这里已经有答案了 C 中声明的静态变量如下 private const string Host http 80dfgf7c22634nbbfb82339d46 cloudapp net private const string S

随机推荐

  • 如何使用 PHPUnit 测试远程 Postgres 服务器上的数据库交互?

    我正在尝试对我创建的类进行单元测试 但大多数类都处理数据库 我已经在本地测试了非数据库相关的类 但当涉及到使用数据库时 尤其是远程数据库 我感到很困惑 该指南显示使用 PDO 访问本地数据库 该数据库似乎转储到 XML 文件 因此它对我来说
  • 找到颜色范围内最接近的颜色匹配[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有十个十六进制 RGB 颜色值 它们是肤色 我希望能够找到与特定十六进制 RGB 值最接近的匹配 我会以某种方式从起始颜色迭代直到落
  • android Recyclerview Layoutmanager的onLayoutChildren在item内容更改时调用

    我有一个带有自定义布局管理器的回收器视图 它是一个twowayview staggeredgridview布局管理器https github com lucasr twoway view blob master layouts src ma
  • 禁止 XmlSerializer 发出空值类型

    请考虑以下 Amount 值类型属性 该属性被标记为可为 null 的 XmlElement XmlElement IsNullable true public double Amount get set 当可为 null 的值类型设置为
  • 实例变量定义和实例块

    我有以下代码 s Hello String s 这编译得很好 这意味着变量定义在实例块之前执行 但是 如果我使用以下代码 它不会编译 错误 非法前向引用 s Hello String ss s String s 因此 不可能在变量之前的实例
  • setwd() 在当前工作目录中

    我有一个文件夹列表 每个文件夹中都有一个与 R 相同的脚本 必须在文件夹中的文件上运行 我编写了一次脚本并将脚本复制到每个文件夹中 问题是我有大约 100 个文件夹的列表 因此我不可能手动在当前工作目录中 setwd 我想知道是否可以设置当
  • Arm GCC 链接器:如何将数据放在 (rw) 非易失性存储器中的绝对地址处

    我面临以下问题 我正在对 ARM cortex M4 微控制器进行编程 我希望它具有 IP 地址 网络掩码 网关等的默认值 该默认值应该可以通过串行通信进行更改 并且更改应该是持久的 例如 IP 地址和网络掩码的默认值为 192 168 1
  • AngularJS 按下按键时更改多行选择 ng-grid 属性

    我在视图中定义了以下网格 div class gridStyle hide div 我想仅在按下 ctrl 键时才允许多重选择 所以我在控制器中将 multiSelect 属性定义为 false scope resultsOptions d
  • mailto:带附件的链接

    我为我的客户制作了一个应用程序 它提供具有以下示例结构的 zip 文件 index html files file pdf inc style css 基本上 用户将使用名为 Sites 2 Go 的应用程序将 zip 文件传输到他们的 i
  • SQL Server 中什么被视为“大”表?

    我有一个表 其中有 1000 万条记录 这算是很多记录吗 我应该担心搜索时间吗 如果没有 它会继续增长 那又怎样is算一张大桌子吗 表大小对搜索时间的影响有多大 我可以采取哪些措施来改善这些问题 最好是在它们成为问题之前 大 就像 聪明 它
  • v8旧空间和新空间是什么?

    Node js据我所知 有两个参数来控制内存分配 max new space size and max old space size 提到的具体是什么NEW SPACE and OLD SPACE things 在分代垃圾收集器 V8 使用
  • 创建索引视图时如何引用表两次?如果没有它,我可以基于 2 个表和多行强制执行唯一性吗?

    EDIT 添加了我试图禁止的示例数据 这个问题类似于 无法在视图上创建聚集索引 因为我两次引用同一个表 有什么解决方法吗 https stackoverflow com questions 1011595 cannot create a c
  • 具有公共抽象基类的对象的集合

    我有一个名为 generic 的抽象类 实现如下 public abstract class generic public string creatorID get set public string itemID get set publ
  • 用对象的属性来生成函数

    在 PowerShell 中 您可以将多个参数传递给函数或 cmdlet 方法是将它们包装在哈希表变量中 然后传递前缀为该变量 代替 是否可以使用作为另一个对象的属性的哈希表 即作为一个衬垫 进行splat 例如下面我首先必须分配属性 te
  • mediaelement 中的 UWP YouTube 播放器

    我目前正在开发一个 UWP youtube 播放器 但在播放实际视频时遇到了一些大问题 我正在使用它在媒体元素中播放 YouTube 视频 using MyToolkit Multimedia var url await YouTube G
  • 具有依赖项的 CocoaPods 框架 - 在框架模块内包含非模块化标头

    我正在尝试构建一个具有其他 pod 依赖项的私有 CocoaPods 框架 其中 我将 Parse 添加为 podspec 文件中的依赖项 s dependency Parse 然而 当我尝试将其清理干净时 pod lib lint MyP
  • ASP.NET MVC 领域的最佳实践

    我目前正在构建一个 CMS 系统 我需要一种简单的方法来包含或排除组件 我的第一个想法是使用 asp net mvc 区域功能来识别每个组件本身 但从我看来 区域特征有problems https stackoverflow com que
  • 有什么理由不使用 SQLObject 而不是 SQLAlchemy? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我预计不需要比基本 CRUD 类型功能更多的功能 我知道 SQLAlchemy 更灵活 但 sqlobj
  • 重新启动 EC2 实例时会发生什么?

    当我重新启动 EC2 实例时 我是否会再次获取初始映像 或者保留重新启动前的硬盘状态 计费会发生什么情况 该小时是否重新开始 或者我是否继续使用重新启动时所在的小时的一部分 重新启动实例就像重新启动 PC 硬盘不受影响 您不会返回到映像的原
  • macOS:检测所有应用程序启动,包括后台应用程序?

    这里是新手 我正在尝试为应用程序启动创建一个小型侦听器 并且我已经有了 almon m import