Objective c 如何设置外部应用程序在OS X上始终处于最前端?
我试图在我的Mac电脑上启动内置的calculator.app(这意味着它在我的应用程序之外),并强制计算器在屏幕上永远保持最前端 这是我的流程。首先,我启动计算器并将其暂时放在最前面Objective c 如何设置外部应用程序在OS X上始终处于最前端?,objective-c,macos,cocoa,accessibility,macos-carbon,Objective C,Macos,Cocoa,Accessibility,Macos Carbon,我试图在我的Mac电脑上启动内置的calculator.app(这意味着它在我的应用程序之外),并强制计算器在屏幕上永远保持最前端 这是我的流程。首先,我启动计算器并将其暂时放在最前面 if ([[NSWorkspace sharedWorkspace] respondsToSelector:@selector(launchApplicationAtURL:options:configuration:error:)]) [[NSWorkspace sharedWorkspace] launchA
if ([[NSWorkspace sharedWorkspace] respondsToSelector:@selector(launchApplicationAtURL:options:configuration:error:)])
[[NSWorkspace sharedWorkspace] launchApplicationAtURL:[NSURL fileURLWithPath:@"/Applications/Calculator.app/Contents/MacOS/Calculator" isDirectory:NO]
options:NSWorkspaceLaunchDefault
configuration:nil
error:NULL];
之后,我根据计算器的所有者名称识别它,并尝试将Calculator.app固定在最前面。我被困在这里了。我想做的是以下两种方式之一:
1.设置属性,使其始终位于最前面。(找不到合适的
属性,仅找到要调整大小或位置的属性)
2.获取计算器的NSC窗口,并将级别设置为最前面。(似乎不可行:)
但似乎两者都不可用
CFArrayRef windowList = CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly | kCGWindowListExcludeDesktopElements, kCGNullWindowID);
NSArray *arr = CFBridgingRelease(windowList);
for (NSMutableDictionary *entry in arr){
NSString *ownerName = [entry objectForKey:(id)kCGWindowOwnerName];
if([ownerName isEqualToString:@"Calculator"]){
pid_t pid = [[entry objectForKey:(id)kCGWindowOwnerPID] intValue];
AXUIElementRef appRef = AXUIElementCreateApplication(pid);
CFArrayRef windowList;
AXUIElementCopyAttributeValue(appRef, kAXWindowsAttribute, (CFTypeRef *)&windowList);
AXUIElementRef windowRef = (AXUIElementRef) CFArrayGetValueAtIndex( windowList, 0);
CFTypeRef role;
AXUIElementCopyAttributeValue(windowRef, kAXRoleAttribute, (CFTypeRef *)&role);
/*Would like to get the window of the application or assign some attribute to set Calculator frontmost*/
}
有没有办法实现我上面提到的两个方面?或者,对于将外部应用程序设置为最前端有什么建议吗?@jimwan您在最前端的功能上做了吗?@jimwan您在最前端的功能上做了吗?