Мое приложение (исключительно удобное для пользователя) использует API-интерфейсы специальных возможностей для захвата содержимого текстовых полей, принадлежащих другим приложениям.
Я пользуюсь превосходным Инспектором Доступности от Apple для помощи и вдохновения
https://developer.apple.com/library/mac/#documentation/Accessibility/Conceptual/AccessibilityMacOSX/OSXAXTesting/OSXAXTestingApps.html
Я включил класс UIElementUtilities
этого проекта, который я могу использовать для следующих действий:
//Get focused App
AXUIElementRef frontMostApp;
frontMostApp = getFrontMostApp();
//Get focused UIElement (Such as a textfield)
AXUIElementRef focusedUIElement;
AXUIElementCopyAttributeValue(frontMostApp, kAXFocusedUIElementAttribute, (CFTypeRef *)&focusedUIElement);
NSString *textfieldContents = [UIElementUtilities descriptionForUIElement:focusedUIElement attribute:(NSString *)kAXValueAttribute beingVerbose:NO];
//descriptionForUIElement:attribute:beingVerbose uses `AXUIElementCopyAttributeValue`
NSLog(@"TEXT FIELD CONTENTS: %@", textfieldContents);
Таким образом, я могу получить kAXValueAttribute
(он же текстовое содержимое текстового поля приложения) в виде открытого текста NSString
.
Есть ли способ сделать то же самое, но получить NSAttributedString
? Мне нужно вытащить имя шрифта и размер шрифта, который в настоящее время используется в текстовом поле.
Конечная цель - использовать имя шрифта и размер шрифта для расчета положения каретки в текстовом поле. (Я уже могу это сделать, учитывая имя / размер шрифта). Но если есть лучший способ рассчитать положение каретки, это был бы предпочтительный ответ. В этом случае мне не нужно получать NSAttributedString.