Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何设置外部应用程序在OS X上始终处于最前端?_Objective C_Macos_Cocoa_Accessibility_Macos Carbon - Fatal编程技术网

Objective c 如何设置外部应用程序在OS X上始终处于最前端?

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

我试图在我的Mac电脑上启动内置的calculator.app(这意味着它在我的应用程序之外),并强制计算器在屏幕上永远保持最前端

这是我的流程。首先,我启动计算器并将其暂时放在最前面

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您在最前端的功能上做了吗?