objective-c – 如何通过Accessibility API获取当前所选文本的全局屏幕坐标.

前端之家收集整理的这篇文章主要介绍了objective-c – 如何通过Accessibility API获取当前所选文本的全局屏幕坐标.前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要帮助找出,如何在任何应用程序上按下CMD CTRL D,Dictionary应用程序如何显示以下弹出对话框中的所选文本.我想实现
与我的可可应用程序相同的功能,我的应用程序将在后台运行,并显示所选文本的某些热键按键的建议.

我已经实现了热键捕获,我只需要有代码来获得屏幕上所选文本的矩形区域,所以我可以显示对话框,如字典应用程序.

谢谢

解决方法

您可以使用可访问性API.确保选中“启用辅助设备访问”设置(在系统偏好设置/通用访问中).

以下代码片段将确定大多数应用程序中所选文本的边界(屏幕坐标).不幸的是,它在Mail和Safari中不起作用,因为它们使用私有辅助功能属性.很可能让它在那里工作,但它需要更多的工作和可能的私人API调用.

AXUIElementRef systemWideElement = AXUIElementCreateSystemWide();
AXUIElementRef focussedElement = NULL;
AXError error = AXUIElementCopyAttributeValue(systemWideElement,kAXFocusedUIElementAttribute,(CFTypeRef *)&focussedElement);
if (error != kAXErrorSuccess) {
    NSLog(@"Could not get focussed element");
} else {
    AXValueRef selectedRangeValue = NULL;
    AXError getSelectedRangeError = AXUIElementCopyAttributeValue(focussedElement,kAXSelectedTextRangeAttribute,(CFTypeRef *)&selectedRangeValue);
    if (getSelectedRangeError == kAXErrorSuccess) {
        CFRange selectedRange;
        AXValueGetValue(selectedRangeValue,kAXValueCFRangeType,&selectedRange);
        AXValueRef selectionBoundsValue = NULL;
        AXError getSelectionBoundsError = AXUIElementCopyParameterizedAttributeValue(focussedElement,kAXBoundsForRangeParameterizedAttribute,selectedRangeValue,(CFTypeRef *)&selectionBoundsValue);
        CFRelease(selectedRangeValue);
        if (getSelectionBoundsError == kAXErrorSuccess) {
            CGRect selectionBounds;
            AXValueGetValue(selectionBoundsValue,kAXValueCGRectType,&selectionBounds);
            NSLog(@"Selection bounds: %@",NSStringFromRect(NSRectFromCGRect(selectionBounds)));
        } else {
            NSLog(@"Could not get bounds for selected range");
        }
        if (selectionBoundsValue != NULL) CFRelease(selectionBoundsValue);
    } else {
        NSLog(@"Could not get selected range");
    }
}
if (focussedElement != NULL) CFRelease(focussedElement);
CFRelease(systemWideElement);
原文链接:https://www.f2er.com/c/114529.html

猜你在找的C&C++相关文章