Получить название или количество вкладок, открытых в Safari или Google chrome программно - PullRequest
0 голосов
/ 20 июня 2020

Здесь я пытаюсь узнать о процессах или приложениях, запущенных на моем Ma c. Я разработал какао-приложение, в котором я могу получить информацию о приложениях, которые в настоящее время запущены на моем ma c, используя приведенный ниже код.

NSArray *runningApps = [[NSWorkspace sharedWorkspace] runningApplications];

Однако теперь я хочу чтобы получить номер или название вкладок, открытых в любом браузере, установленном на моей ма c. Пожалуйста, скажите мне, как я могу этого добиться, если вы имеете представление об этом.

Ниже приведен код, с которым я столкнулся в stackoverflow, и ссылка, которую я упомянул в одном из моих комментариев.

И я вызываю logTabs (). Однако он не возвращает мне названия вкладок.

static NSArray *getAXUIElements(AXUIElementRef theContainer, CFStringRef theRole)
{
    // get children of theContainer
    AXError error;
    NSMutableArray *array = [NSMutableArray array];
    CFTypeRef children;
    error = AXUIElementCopyAttributeValue(theContainer, kAXChildrenAttribute, &children);
    if (error != kAXErrorSuccess)
        return nil;
    // filter children whose role is theRole
    for (CFIndex i = 0; i < CFArrayGetCount(children); i++)
    {
        AXUIElementRef child = CFArrayGetValueAtIndex(children, i);
        CFTypeRef role;
        error = AXUIElementCopyAttributeValue(child, kAXRoleAttribute, &role);
        if (error == kAXErrorSuccess)
        {
            if (CFStringCompare(role, theRole, 0) == kCFCompareEqualTo)
                [array addObject:(__bridge id)child];
            CFRelease(role);
        }
    }
    CFRelease(children);
    return [NSArray arrayWithArray:array];
}

static void logTabs()
{
    // get the title of every tab of every window of Safari

 NSArray *appArray = [NSRunningApplication runningApplicationsWithBundleIdentifier:@"com.google.Chrome"];
 AXUIElementRef SafariApp = AXUIElementCreateApplication([[appArray objectAtIndex:0] processIdentifier]);
    if (SafariApp)
    {
        NSLog(@"titile --- 0000 is %lu", (unsigned long)appArray.count);

        NSArray *windowArray = getAXUIElements(SafariApp, kAXWindowRole);
        for (id window in windowArray)
        {

            NSArray *tabGroupArray = getAXUIElements((__bridge AXUIElementRef)(window), kAXTabGroupRole);
            for (id tabGroup in tabGroupArray)
            {

                NSArray *radioButtonArray = getAXUIElements((__bridge AXUIElementRef)(tabGroup), kAXRadioButtonRole);
                for (id radioButton in radioButtonArray)
                {
                    CFTypeRef title = NULL;
                    AXError error = AXUIElementCopyAttributeValue((__bridge AXUIElementRef)radioButton, kAXTitleAttribute, &title);
                    if (error == kAXErrorSuccess)
                    {
                        NSLog(@"Title of the tab is %@", title);
                        CFRelease(title);
                    }
                }
            }
        }
        CFRelease(SafariApp);
    }
}




Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...