2
我的應用程序是代理程序類型(在後臺運行),並且我在窗口中有一個按鈕。當用戶在TextEdit中選擇一些文本並從我的應用程序觸發一個動作時,我需要獲取選擇文本的範圍。我使用下面的代碼,但我得到以下錯誤我無法從我的後臺應用程序中獲取TextEdit應用程序中選定文本的範圍
kAXErrorAttributeUnsupported
我使用下面的代碼
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);
在上面的代碼中getSelectedRangeError == kAXErrorAttributeUnsupported
更新: 我正在沙盒環境中工作恩,這是不工作的原因。
是的,這與服務工作正常,但我也需要使用按鈕操作獲取選擇範圍。我是否可以通過任何簡單的按鈕操作來觸發服務操作? – kulss
那個按鈕在哪裏?在你的應用程序?在TextEdit中? – uliwitness
yes按鈕位於我的應用程序窗口中 – kulss