kAXVisibleCharacterRangeAttribute 忽略应用程序的顶部栏

问题描述 投票:0回答:1
我需要使用

kAXVisibleCharacterRangeAttribute

 在屏幕上绘制 NSPanel 来获取应用程序上文本的可见范围。

但它没有覆盖应用程序的顶部栏,并给出从索引 0 开始的文本范围,即使我已经滚动并且文本不可见。

代码:

func getVisibleCharacterRange()->CFRange?{ var visibleCharacterRange: AnyObject? let errorType: AXError = AXUIElementCopyAttributeValue( self, kAXVisibleCharacterRangeAttribute as CFString, &visibleCharacterRange ) if(errorType == AXError.success){ let v = visibleCharacterRange as! AXValue precondition(AXValueGetType(v) == .cfRange) var range = CFRange() let done = AXValueGetValue(v, .cfRange, &range) precondition(done) return range } return nil }
在 Microsoft Word 上:

解决方法:获取文本区域的

INITIAL CGrect 并跟踪窗口大小调整和窗口移动

swift macos appkit
1个回答
0
投票
但是您的解决方法不是仅在缩放系数为 100% 并且屏幕位于中间时才起作用吗?如果你放大到例如160% 在 MS Word 中,矩形将比屏幕大得多(因为它不考虑缩放),并且您无法判断该项目是否可见。此外,如果您在注释中向下滚动并触发初始矩形,则上边框将不起作用。一般来说,对于 ScrollViews/Textareas,一旦视图已经滚动,当您获取初始矩形时,就会出现问题。您是否使用此解决方法遇到过此问题?你的解决方案是什么?

初始直方图:

var position: CGPoint = CGPoint.zero var positionCFType: CFTypeRef? if AXUIElementCopyAttributeValue(focusedElement as! AXUIElement, kAXPositionAttribute as CFString, &positionCFType) == .success { AXValueGetValue(positionCFType as! AXValue, .cgPoint, &position) } var size: CGSize = CGSize.zero var sizeCFType: CFTypeRef? if AXUIElementCopyAttributeValue(focusedElement as! AXUIElement, kAXSizeAttribute as CFString, &sizeCFType) == .success { AXValueGetValue(sizeCFType as! AXValue, .cgSize, &size) } let initialRect = CGRect(origin: position, size: size)
    
© www.soinside.com 2019 - 2024. All rights reserved.