我想获取正在运行的应用程序的窗口列表.我可以从中获取正在运行的应用程序列表[[NSWorkspace sharedWorkspace] runningApplications]
,但窗口列表仅可用于NSApplication
.有没有办法转换NSRunningApplication
为NSApplication
,或某种方式更直接地获取窗口列表?
我有一个AppleEventDescriptor
地方需要获取发送应用程序的包标识符.Apple Event包含一个typeProcessSerialNumber
可以被强制转换为ProcessSerialNumber
.
问题是GetProcessPID()
在10.9 中被弃用了,并且似乎没有得到制裁pid_t
可以用来实例化NSRunningApplication
使用的方法-runningApplicationWithProcessIdentifier:
.
我发现的所有其他选项都存在于Processes.h中,也不推荐使用.
我是否遗漏了某些内容,或者我是否必须遵守此弃用警告?
使用案例:我以" user1 " 身份登录并启动Safari,然后点击右上角的" user1 "并将用户切换为" user2 ".现在,我正在尝试检测Safari是否正在运行" user1 ",但我无法使用标准调用.我使用OS X 10.8 Mountain Lion来开发和运行我的代码.
我使用了以下但是徒劳无功:
[[NSWorkspace sharedWorkspace] runningApplications]
- 列表中没有SafariGetNextProcess()
- Safari没有出现GetProcessForPID()
- 我收到错误"没有这样的过程"但是当我ps -aef | grep Safari
从终端做一个时,我可以看到Safari.(这不仅适用于Safari,也适用于其他应用程序.)
有人可以请帮助.非常感谢你.
macos objective-c switch-user nsworkspace nsrunningapplication
GetProcessPID
在OSX 10.9中被标记为已弃用以及注释:
使用相应NSRunningApplication对象的processIdentifier属性.
问题是构造类方法NSRunningApplication
没有办法NSRunningApplication
通过a ProcessSerialNum
,只能通过PID或包名来获取.
捆绑名称太模糊(可能有多个实例),我没有PID(这是我想要的).
在OSX 10.9中,有没有办法在你有PSN时获得PID?
有没有办法过滤由 给出的应用程序列表[NSWorkspace runningApplications]
以隐藏所有守护进程等,而无需手动检查每个应用程序的 plist 中的 UIAgent 密钥?如果应用程序没有显示在扩展坞中,则我对它不感兴趣。
我想显示所有正在运行的应用程序名称的列表。
问题:它不会添加调用该函数后正在运行的应用程序。因此,它不会同时将应用程序名称添加到列表中。
目标:我想添加一个侦听器,因此如果一个新应用程序正在运行,它将同时将其添加到数组中,而无需重新启动应用程序或再次调用该函数。
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) 我正在尝试获取最近使用的应用程序列表.NSWorkspace
返回活动应用程序列表,我可以使用几个选项对它们进行排序NSRunningApplication
.见下面的列表:
- launchDate
- finishedLaunching
- processIdentifier
Run Code Online (Sandbox Code Playgroud)
我不想要发布日期,而是最近的"活动"日期(就像方式cmd- tab排序).有谁知道这个解决方案?
场景是这样的:"我从一个用户运行一个app(比如myproc)然后快速用户切换到第二个用户"
现在,当我尝试确定所有使用特定束标识符运行的进程时(比如com.ak.myproc) ; 我无法确定从第一个用户运行的进程.
我尝试过以下但是徒劳无功:
[NSRunningApplication runningApplicationsWithBundleIdentifier:]
[[NSWorkspace sharedWorkspace] runningApplications]
然后比较每个应用程序的包标识符 - 为第一个用户运行的应用程序甚至不显示在此列表中.sysctl()
然后迭代进程列表 - 这里,来自第一个用户的应用程序的pid确实来了.之后:
[NSRunningApplication runningApplicationWithProcessIdentifier:]
,我没有.GetProcessForPID()
跟着时ProcessInformationCopyDictionary()
,我得到一个零字典.GetProcessForPID()
跟着时GetProcessInformation()
,我没有得到任何有用的东西ProcessInfoRec
.有人可以帮忙吗?谢谢.
操作系统:Mac OS X 10.8.4
Xcode:4.6.2
macos sysctl cfbundleidentifier nsworkspace nsrunningapplication
我正在尝试创建一个程序来专注于某个应用程序(如果已启动)。这是我的代码:
#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 ×7
cocoa ×5
nsworkspace ×5
objective-c ×5
applescript ×1
for-loop ×1
pid ×1
swift ×1
switch-user ×1
sysctl ×1