问题标签 [nsrunningapplication]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
157 浏览

objective-c - OS X Login helper app thinks app is already running

I'm working on implementing a helper app to launch a main, non-sandboxed app upon user login.

I want to make sure that, in the event there is already an instance of the app running at login, the helper app does not launch a second instance of the app, and terminates itself appropriately.

When I'm testing this, and looking at Console's output, I do see that my helper app already thinks there is an app instance running, even if there is not. So, the helper app will quit without launching the main app. Does anyone have an idea on why the helper app may think there is an existing app instance, even though there is not?

0 投票
1 回答
743 浏览

objective-c - 从 pid 获取 NSRunningApplication 对象

我是 Objective-c 的初学者,非常感谢您的帮助...我需要检查某个 PID 是否是活动应用程序的 PID。我想通过将pid转换为NSRunningApplication然后使用接口isActive来做到这一点。我的问题是如何将 PID 转换为 NSRunningApplication?或者也许还有其他方法可以检查 PID 是否处于活动状态?

PS 我看到了一个实现,您可以在其中获取所有应用程序的列表,并为每个应用程序检查它是否处于活动状态。然后从活动中检索pid。似乎效率不高。

0 投票
1 回答
1034 浏览

objective-c - -[NSRunningApplication activateWithOptions:] 不工作

我正在尝试创建一个专注于某个应用程序(如果已启动)的程序。这是我的代码:

当我运行它时,它会打印“激活失败”,并且 Firefox 没有成为焦点。我究竟做错了什么?

0 投票
0 回答
186 浏览

objective-c - NSRunningApplication 内存问题

我注意到一个由计时器执行的以下函数的显着内存使用:

代码基本上什么都不做。

访问 NSRunningApplication 实例的几乎任何属性(bundleIdentifier、bundleURL、描述...)都会导致内存使用量以 ~1MB/秒的速度增加(考虑到指定的时间间隔)。最糟糕的是,它永远不会停止。虽然我还没有尝试将其设置到极限...

我尝试使用 Instruments(Leaks 模板)对其进行分析,但没有发现内存泄漏。

有什么线索吗?


编辑#1:

我做了一个简单的实验,用一个 swift 文件创建了一个控制台应用程序:

输入您正在运行的任何 pid。它需要几秒钟的演出......


编辑#2:

我的最新发现是进程类型直接影响行为。考虑:

如果 processType = kProcessTransformToBackgroundApplication 或 kProcessTransformToUIElementApplication,我会遇到这个问题。如果进程类型 = kProcessTransformToForegroundApplication(默认值),则一切正常。

0 投票
2 回答
911 浏览

objective-c - Objective-C:刷新 FrontmostApplication

我编写了这个小程序,它应该打印两次当前最前面的应用程序,中间有 3 秒的中断。

当我运行这个程序时,我意识到 frontmostApplication 在第二次调用时没有刷新。我在这里找到了解决方案。但我还有两个问题:

1)我想知道为什么frontmostApplication没有更新。

2)每次调用时如何强制刷新?我不想在最前面的应用程序每次停用时都收到通知,因为它对我的目的来说效率有点低。

编辑: 为了清楚起见,我们假设现在的时间是 10:00:00。我调用 printFrontmostApp,它将“Xcode”打印到控制台,因为 Xcode 是当前最前面的应用程序。然后程序休眠 3 秒。在 10:00:01,我打开了另一个应用程序,比如 TextEdit。在 10:00:03,我的程序第二次调用 printFrontmostApp。我希望它打印“TextEdit”,这是当前最前面的应用程序。但它会打印“Xcode”。我无法理解这种行为。

有人可以解释一下 10:00:03 发生了什么吗?该函数似乎“记住”了 frontmostApplication 在 10:00:00 的值,并在第二次调用时保留它。我认为一旦超出范围,任何内存都会被释放,那么为什么会发生这种情况呢?

以及如何让我的程序在 10:00:03 获得最前面的应用程序?我可以在 10:00:00 获得最前面的应用程序,我应该能够在 3 秒后执行相同的操作,对吧?

0 投票
1 回答
582 浏览

objective-c - NSRunningApplication 没有特定的应用程序窗口

我希望我的应用程序知道哪些应用程序当前正在运行并显示在表格中。在表格中,它将显示所有正在运行的应用程序名称,每个应用程序旁边都有一个按钮。单击按钮时,我们必须打开特定应用程序的窗口,即使它已最小化或关闭。我通过以下代码获得了正在运行的应用程序列表,但没有获取应用程序的窗口,因为 NsRunningApplication 对象没有任何窗口或视图。谁能帮帮我吗?

0 投票
2 回答
859 浏览

objective-c - NSWorkspace sharedWorkspace runningApplications导致内存泄漏;替代选择?

我想知道是否有人建议使用 runningApplications 的替代方法,因为类似以下内容似乎正在泄漏内存:

https://openradar.appspot.com/24067155 https://github.com/bradjasper/NSRunningApplicationMemoryLeaks

等到 Apple 提供解决方案是唯一的选择吗?我在沙盒环境中工作,因此一些基于 NSTask 的替代方案可能不起作用。提前感谢您的任何想法。

0 投票
1 回答
65 浏览

macos - 访问任何应用程序包标识符

对于我的应用程序,我让用户为其计算机的特定应用程序选择路径。从那个路径(即/Applications/Itunes.app)我想获取包标识符,并NSRunningApplication从中创建一个实例([NSRunningApplication runningApplicationsWithBundleIdentifier:(nonnull NSString *)];我将如何获取这个包标识符?

0 投票
0 回答
833 浏览

objective-c - 为什么 [NSRunningApplication activateWithOptions:] 返回 NO

当没有明显原因导致应用程序无法激活时,我遇到了[NSRunningApplication activateWithOptions:]返回问题。NO

这不是-[NSRunningApplication activateWithOptions:] 不工作的副本

该问题的公认答案是使用NSApplicationActivateIgnoringOtherApps代替,NSApplicationActivateAllWindows但这不是可接受的答案,因为这两个选项旨在以选项值所暗示的不同方式激活应用程序。

我的代码中有一些地方[NSRunningApplication activateWithOptions:]可以工作,但是当通过 EventTap 调用它时,它几乎总是返回NO,而不管使用NSApplicationActivateAllWindowsNSApplicationActivateIgnoringOtherApps作为option参数。我说“几乎”总是返回NO的原因是因为第一次调用它时,它确实有效。所有第 2 次和后续调用均失败。

我基本上是在处理 Dock 中应用程序图标上的单击事件。我正在使用安装在Dock使用CGEventTapCreateForPSN(). 在事件点击回调中,我已成功确定process identifierDock. 进程 ID 是使用Accessibility API.

现在我需要激活应用程序,所以我调用:

在上面的示例中,我已经验证了 thatcurrentApp是有效的,并且 that bundleIdentifier和 对象中processIdentifier的其他一些实例 varRunningApplication是正确的。

如上所述,无论NSApplicationActivationOptions使用什么,应用程序都不会激活,并且方法返回NO. 同样,它偶尔会在第一次单击时起作用,但在所有后续单击任何应用程序的停靠图标时都会失败。

谁能解释为什么这么简单的方法会失败?可能为什么它只在第一次被调用时才起作用?为什么它在不从 EventTap 执行时总是有效?

我花了几个小时试图解决这个问题,唯一总是有效的方法是使用不推荐使用的方法SetFrontProcessWithOptions(&psn, 0);而不是[NSRunningApplication activateWithOptions:NSApplicationActivateAllWindows].

我尝试将调用包装到[NSRunningApplication activateWithOptions:]within dispatch_async,我还尝试使用 EventTap 中的操作队列,但都没有解决问题。最后,我尝试发送通知并[NSRunningApplication activateWithOptions:]从通知回调中调用,这也失败了。这是我的事件水龙头中的代码:

非常感谢任何帮助!附加的调试屏幕抓取显示了第一次尝试通过单击其停靠图标来激活应用程序是如何成功的,以及后续单击如何无法激活应用程序。

在此处输入图像描述

更新并解决了一半: 我已经确定了为什么[NSRunningApplication activateWithOptions:]在第一次尝试时有效而在第二次和后续尝试中失败。第一次单击 Dock 中的应用程序图标时,我的应用程序是活动应用程序。在随后单击应用程序图标时,其他一些应用程序处于活动状态。所以这里的问题似乎是[NSRunningApplication activateWithOptions:]只有当我的应用程序是最前面的进程时才会起作用。

如果我[NSApp activateIgnoringOtherApps:YES];在调用之前添加[NSRunningApplication activateWithOptions:],它始终按预期工作,但是,由于仅激活我的应用程序然后激活不同的应用程序,菜单栏会闪烁。于是问题就变成了:

[NSRunningApplication activateWithOptions:]当我的应用程序不是最前面的应用程序时,有什么方法可以开始工作吗?并且activateWithOptions:应该以这种方式工作?

0 投票
2 回答
3008 浏览

excel - 每日定时器自动运行宏

我试图每天早上 9 点运行一个宏。我正在尝试使用 OnTime 应用程序并测试了宏以在特定时间启动,但它不能自动工作。我必须手动运行宏才能弹出消息框。有什么建议吗?