Bạn có thể sử dụng API trợ năng cho điều đó. Đảm bảo rằng cài đặt "Bật truy cập cho thiết bị trợ giúp" được chọn (trong System Preferences/Universal Access).
Đoạn mã sau sẽ xác định các giới hạn (trong tọa độ màn hình) của văn bản đã chọn trong hầu hết các ứng dụng. Thật không may, nó không hoạt động trong Mail và Safari, vì chúng sử dụng các thuộc tính trợ năng riêng. Nó có thể làm cho nó hoạt động ở đó, nhưng nó đòi hỏi nhiều công việc hơn và có thể là các cuộc gọi API riêng tư.
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);
làm cách nào bạn hiển thị cửa sổ bật lên vượt quá giới hạn của ứng dụng của riêng bạn? –