Здесь я пытаюсь узнать о процессах или приложениях, запущенных на моем 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);
}
}