2017-07-24 42 views
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

更新: 我正在沙盒環境中工作恩,這是不工作的原因。

回答

0

您是否嘗試過註冊服務?服務是Apple打算用於從另一個應用程序修改選定文本內容的機制。

+0

是的,這與服務工作正常,但我也需要使用按鈕操作獲取選擇範圍。我是否可以通過任何簡單的按鈕操作來觸發服務操作? – kulss

+0

那個按鈕在哪裏?在你的應用程序?在TextEdit中? – uliwitness

+0

yes按鈕位於我的應用程序窗口中 – kulss

相關問題