我试图获得系统选择文本的边界,我在这里找到了这个方法:
+ (void) getPosition{
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);
}
但是,如果我从appDelegate.m类以外的任何地方调用它,它总是返回:
Could not get focussed element
我错过了什么设置?
或者是否有其他人知道如何获得系统选择的文字位置?
答案 0 :(得分:1)
您不应该将focussedvalue
(实际拼写为focusedvalue
)初始化为AXUIElementRef
,然后在将其作为参数传递给AXUIElementCopyAttributeValue
时进行类型转换。<登记/>
而是将其初始化为CFTypeRef
。
试试看,并在此处查看示例代码以供参考: https://developer.apple.com/library/mac/samplecode/UIElementInspector/Listings/UIElementUtilities_m.html#//apple_ref/doc/uid/DTS10000728-UIElementUtilities_m-DontLinkElementID_14
答案 1 :(得分:0)
所以我找到了一种从我的App Delegate.m文件定位窗口的方法,所以我的想法是,如果我无法将Bounds放入我的自定义类,我从AppDelegate.m文件中取出它们并将Window放在里面好吧,很好的想法,但是,无论我做什么,我都会收到2Could not get Selection Range&#34;错误消息,代码再一次-25212,这整个东西很糟糕......
我在Cocoa中必须处理的一个令人毛骨悚然的部分...