gpt4 book ai didi

objective-c - MacOS 辅助功能 API 更改所选范围位置的值

转载 作者:行者123 更新时间:2023-12-03 17:01:16 24 4
gpt4 key购买 nike

我在系统范围内使用 Cocoa 和 Accessibility API 来获取一些信息,例如文本值、选定的文本值,但是有没有办法改变这些信息?正如您在我的图片中看到的,您可以编辑键盘光标的位置 (Loc) 和所选文本的长度 (Len),因此必须有一种方法可以通过编程来执行此操作。另外,我正在寻找如何在屏幕内获取键盘光标位置(闪烁插入符号),即使没有选择任何内容。 (我见过应用程序这样做)

编辑:

这是我迄今为止获取属性的代码:

 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}

value I want to change

最佳答案

首先,你得到的值不是字符串对象。将其转换为 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 */;

关于objective-c - MacOS 辅助功能 API 更改所选范围位置的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50418321/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com