标签: nsrunningapplication

如何获取NSRunningApplication的窗口

我想获取正在运行的应用程序的窗口列表.我可以从中获取正在运行的应用程序列表[[NSWorkspace sharedWorkspace] runningApplications],但窗口列表仅可用于NSApplication.有没有办法转换NSRunningApplicationNSApplication,或某种方式更直接地获取窗口列表?

cocoa nsapplication nsworkspace nsrunningapplication

8
推荐指数
1
解决办法
3794
查看次数

使用ProcessSerialNumber获取NSRunningApplication

我有一个AppleEventDescriptor地方需要获取发送应用程序的包标识符.Apple Event包含一个typeProcessSerialNumber可以被强制转换为ProcessSerialNumber.

问题是GetProcessPID()在10.9 中被弃用了,并且似乎没有得到制裁pid_t可以用来实例化NSRunningApplication使用的方法-runningApplicationWithProcessIdentifier:.

我发现的所有其他选项都存在于Processes.h中,也不推荐使用.

我是否遗漏了某些内容,或者我是否必须遵守此弃用警告?

applescript objective-c nsrunningapplication

7
推荐指数
1
解决办法
1996
查看次数

无法检测与其他用户一起运行的应用程序(通过切换用户)

使用案例:我以" user1 " 身份登录并启动Safari,然后点击右上角的" user1 "并将用户切换为" user2 ".现在,我正在尝试检测Safari是否正在运行" user1 ",但我无法使用标准调用.我使用OS X 10.8 Mountain Lion来开发和运行我的代码.

我使用了以下但是徒劳无功:

  1. [[NSWorkspace sharedWorkspace] runningApplications] - 列表中没有Safari
  2. GetNextProcess() - Safari没有出现
  3. GetProcessForPID() - 我收到错误"没有这样的过程"

但是当我ps -aef | grep Safari从终端做一个时,我可以看到Safari.(这不仅适用于Safari,也适用于其他应用程序.)

有人可以请帮助.非常感谢你.

macos objective-c switch-user nsworkspace nsrunningapplication

5
推荐指数
1
解决办法
1958
查看次数

如何从OSX 10.9中的ProcessSerialNum获取PID?

GetProcessPID 在OSX 10.9中被标记为已弃用以及注释:

使用相应NSRunningApplication对象的processIdentifier属性.

问题是构造类方法NSRunningApplication没有办法NSRunningApplication通过a ProcessSerialNum,只能通过PID或包名来获取.

捆绑名称太模糊(可能有多个实例),我没有PID(这是我想要的).

在OSX 10.9中,有没有办法在你有PSN时获得PID?

macos pid objective-c nsrunningapplication

5
推荐指数
1
解决办法
1401
查看次数

过滤 [NSWorkspace runningApplications] 以仅包含用户应用程序(无守护程序/UIAgents)

有没有办法过滤由 给出的应用程序列表[NSWorkspace runningApplications]以隐藏所有守护进程等,而无需手动检查每个应用程序的 plist 中的 UIAgent 密钥?如果应用程序没有显示在扩展坞中,则我对它不感兴趣。

macos cocoa objective-c nsworkspace nsrunningapplication

4
推荐指数
1
解决办法
1999
查看次数

如何为所有正在运行的应用程序添加侦听器

我想显示所有正在运行的应用程序名称的列表。

问题:它不会添加调用该函数后正在运行的应用程序。因此,它不会同时将应用程序名称添加到列表中。

目标:我想添加一个侦听器,因此如果一个新应用程序正在运行,它将同时将其添加到数组中,而无需重新启动应用程序或再次调用该函数。

func allRunningApplications() {

        for runningApplication in NSWorkspace.shared.runningApplications {

            let appName = runningApplication.localizedName

            // Add App Name to Array
            array.append(appName)
    }
}
Run Code Online (Sandbox Code Playgroud)

macos cocoa for-loop nsrunningapplication swift

4
推荐指数
2
解决办法
2389
查看次数

NSRunningApplication,最近使用的应用程序的返回列表?

我正在尝试获取最近使用的应用程序列表.NSWorkspace返回活动应用程序列表,我可以使用几个选项对它们进行排序NSRunningApplication.见下面的列表:

- launchDate
- finishedLaunching
- processIdentifier
Run Code Online (Sandbox Code Playgroud)

我不想要发布日期,而是最近的"活动"日期(就像方式cmd- tab排序).有谁知道这个解决方案?

macos cocoa nsworkspace nsrunningapplication

3
推荐指数
1
解决办法
1340
查看次数

获取从另一个用户运行的应用程序的包标识符

场景是这样的:"我从一个用户运行一个app(比如myproc)然后快速用户切换到第二个用户"
现在,当我尝试确定所有使用特定束标识符运行的进程时(比如com.ak.myproc) ; 我无法确定从第一个用户运行的进程.

我尝试过以下但是徒劳无功:

  1. [NSRunningApplication runningApplicationsWithBundleIdentifier:]
  2. [[NSWorkspace sharedWorkspace] runningApplications] 然后比较每个应用程序的包标识符 - 为第一个用户运行的应用程序甚至不显示在此列表中.
  3. 使用sysctl()然后迭代进程列表 - 这里,来自第一个用户的应用程序的pid确实来了.之后:
    • 当我尝试时[NSRunningApplication runningApplicationWithProcessIdentifier:],我没有.
    • 当我尝试GetProcessForPID()跟着时ProcessInformationCopyDictionary(),我得到一个零字典.
    • 当我尝试GetProcessForPID()跟着时GetProcessInformation(),我没有得到任何有用的东西ProcessInfoRec.

有人可以帮忙吗?谢谢.

操作系统:Mac OS X 10.8.4
Xcode:4.6.2

macos sysctl cfbundleidentifier nsworkspace nsrunningapplication

3
推荐指数
1
解决办法
1498
查看次数

-[NSRunningApplication activateWithOptions:] 不工作

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

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

int main() {
  // activate Firefox
  NSArray *apps = [NSRunningApplication runningApplicationsWithBundleIdentifier: @"org.mozilla.firefox"];

  if ([apps count] == 0) {
    printf("no matching app\n");
    return 1;
  }

  if (![apps[0] activateWithOptions: NSApplicationActivateAllWindows]) {
    printf("failed to activate\n");
    return 1;
  }

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

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

macos cocoa objective-c nsrunningapplication

1
推荐指数
1
解决办法
1340
查看次数