Objective c MacOS辅助功能API更改选定范围位置的值
我正在使用Cocoa和Accessibility API系统范围内获取一些信息,如文本值、选定文本值,但有没有办法更改这些信息?正如您在我的图片上看到的,您可以编辑键盘光标(Loc)的位置和所选文本的长度(Len),因此必须有一种方法以编程方式完成此操作。此外,我正在寻找如何获得键盘光标位置(闪烁插入符号)在屏幕内,即使没有选择。(我见过应用程序这样做) 编辑: 这是我到目前为止获取属性的代码:Objective c MacOS辅助功能API更改选定范围位置的值,objective-c,macos,cocoa,Objective C,Macos,Cocoa,我正在使用Cocoa和Accessibility API系统范围内获取一些信息,如文本值、选定文本值,但有没有办法更改这些信息?正如您在我的图片上看到的,您可以编辑键盘光标(Loc)的位置和所选文本的长度(Len),因此必须有一种方法以编程方式完成此操作。此外,我正在寻找如何获得键盘光标位置(闪烁插入符号)在屏幕内,即使没有选择。(我见过应用程序这样做) 编辑: 这是我到目前为止获取属性的代码: AXValueRef textValue = NULL; //Get the location
AXValueRef textValue = NULL;
//Get the location string inside the selectedtextrange
AXError gettextvalueError = AXUIElementCopyAttributeValue(focussedElement, kAXSelectedTextRangeAttribute , (CFTypeRef *)&textValue); //get the text value of focussedElement in object textValue
if(gettextvalueError != kAXErrorSuccess){
NSLog(@"error");
}else{
NSString* textStr = (__bridge NSString*)textValue; // Convert textValue to NSString
}
这是给我一个字符串,包含所选文本和位置+长度的边界对象。只能更改位置吗
<AXValue 0x7f8dda3c4340> {value = location:3 length:0 type = kAXValueCFRangeType}
首先,您获得的值不是字符串对象。将其强制转换为NSString*
不会“转换”它,它只是由编译器决定。记录它工作的原因是,%@
要求对象提供它的描述,AXValue
对象按照您在输出中看到的方式描述自己
要解码该值,请使用如下代码:
CFRange range;
if (AXValueGetValue(textValue, kAXValueTypeCFRange, &range))
{
// use the range
}
else
/* the value isn't of the type that the attribute is supposed to have; abort */;
如果要更改它,请执行以下操作:
range.location = /* some new value */;
AXValueRef newValue = AXValueCreate(kAXValueTypeCFRange, &range);
if (newValue)
{
AXError setError = AXUIElementSetAttributeValue(focussedElement, kAXSelectedTextRangeAttribute, newValue);
/* check setError and handle as appropriate */
CFRelease(newValue);
}
else
/* handle failure */;
到目前为止,您的代码是否可能重复?你尝试过什么?如果你能得到一个值,你可以通过使用AXUIElementSetAttributeValue
而不是AXUIElementCopyAttributeValue
@Willeke谢谢,但是属性是我的问题,我得到这个:{value=location:3 length:0 type=kAXValueCFRangeType}。我怎样才能只更改位置或长度。这非常有用,非常感谢。我还设法在根本没有被选中的情况下获得所选范围的边界。(如果您希望在不破坏用户体验的情况下获得插入符号位置,这非常有用)。我会用你的答案更新我的问题。@hugo411你是如何在没有选择范围的情况下获得插入符号位置的?我只能获取插入符号位置,除非范围长度和位置为0。有什么建议吗?@hugo411我很好奇你是怎么做到的?我正试着得到插入符号的位置,来展示一件府绸。