支持 IAccesible 接口以在文本编辑器中移动插入符号的正确解决方案是什么?

2024-02-08

我想从头开始实现一个支持 IAccessible 接口的文本编辑器。我正在使用 MFC 和 Win32 API。

当记事本等标准文本编辑器中的插入符号位置发生变化时,“讲述人”、JAWS 等客户端工具将发音与插入符号移动相对应的字母、单词或行。我不知道如何实现此功能。我搜索互联网并阅读 MSDN 文档。

我读到http://msdn.microsoft.com/en-us/library/dd317978.aspx http://msdn.microsoft.com/en-us/library/dd317978.aspx and http://msdn.microsoft.com/en-us/library/dd373892.aspx http://msdn.microsoft.com/en-us/library/dd373892.aspx客户端通过操作系统的 AccessibleObjectFromWindow 方法请求插入符号,操作系统将 WM_GETOBJECT 发送到应用程序。在相应的窗口回调函数中收到WM_GETOBJECT消息,但插入符移动事件的hWnd为NULL。我检查了线程消息队列,但是线程消息队列中根本没有收到WM_GETOBJECT。

一种有效但不是正确解决方案的方法是调用

NotifyWinEvent( EVENT_OBJECT_NAMECHANGE, hwnd, OBJID_CLIENT, CHILDID_SELF )

当用户移动插入符时。当客户要求更改名称时,我返回与插入符号移动相关的相应文本。

HRESULT  CMyEditor::get_accName(VARIANT varChild, BSTR *pszName)
{
   *pszName = SysAllocString( L"CORESPONDING TEXT TO THE CARET MOVEMENT" );
   return S_OK;
}

客户端将使用设置WinEventHook()函数来跟踪插入符的以下事件:

  • 事件对象创建
  • EVENT_OBJECT_DESTROY
  • EVENT_OBJECT_SHOW
  • EVENT_OBJECT_HIDE
  • EVENT_OBJECT_LOCATIONCHANGE
  • 事件对象焦点

如果使用自定义控件,则需要使用通知WinEvent()自己触发这些事件,特别是 EVENT_OBJECT_LOCATIONCHANGE ,它应该触发旁白。

当客户端处理这些事件时,它应该访问无障碍他正在跟踪的对象的界面AccessibleObjectFromEvent().

正如您所说,Microsoft Active Accessibility 将处理此调用,并根据给定的处理程序将 WM_GETOBJECT 消息发送到相应的窗口AccessibleObjectFromEvent()(这应该是事件中包含的处理程序)。

当您收到插入符号的 WM_GETOBJECT 时,您应该返回相应的无障碍接口将报告正确的accRole and 地点.

如果您没有收到正确的 WM_GETOBJECT 消息,可能是因为您没有触发正确的事件。

您可以使用无障碍事件观察者检查是否发送了正确的事件:http://msdn.microsoft.com/en-us/library/windows/desktop/dd317979%28v=vs.85%29.aspx http://msdn.microsoft.com/en-us/library/windows/desktop/dd317979%28v=vs.85%29.aspx

请参阅 MSDN 上的 Active Accessibility Servers 开发人员指南:http://msdn.microsoft.com/en-us/library/windows/desktop/dd318053%28v=vs.85%29.aspx http://msdn.microsoft.com/en-us/library/windows/desktop/dd318053%28v=vs.85%29.aspx

Edit

另外,如果您使用 Riched20.dll 提供的标准插入符号(在 Rich Edit 中作为实例),文档规定与其他 UI 元素不同,它没有关联的窗口句柄。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

支持 IAccesible 接口以在文本编辑器中移动插入符号的正确解决方案是什么? 的相关文章

随机推荐

  • DateAdd 列导致溢出

    执行以下查询后 我收到错误 向 日期时间 列添加值导致溢出 我不知道为什么会发生这种情况 因为它已经顺利运行了几周 我只是想在此处添加日期并将它们与开始日期和结束日期进行比较between clause DATEADD day 1 DATE
  • ORG 汇编指令有什么作用?

    谁能给我一个关于 ORG 指令的全面描述 何时以及为何在汇编编写的应用程序中使用它 在 x86 或 AMD64 上使用 Nasm ORG用于设置汇编器位置计数器 这可能会也可能不会在链接时转换为加载地址 它可用于定义绝对地址 例如当定义诸如
  • 如何计算 C# 数组列表的滚动平均值?

    我正在尝试计算数组列表中每四个值的滚动平均值 并将这些值添加到单独的数组列表中 我的原始数组列表称为 numlist 它包含从 1 到 9 的值 List
  • Spring Boot - org.springframework.cglib.core.ReflectUtils$1 进行非法反射访问

    我在使用 Spring Boot 的 Spring 应用程序中遇到问题 WARNING An illegal reflective access operation has occurred WARNING Illegal reflecti
  • 我可以枚举可用的 WLAN 吗?

    我想获取我周围可用的 WLAN 的信息 例如 SSID 这可能吗 Edit 可能是 通过市场认证 的意思 不 这在当前的 API 集中不可用 而且我认为 Mango 集中也没有提到它
  • 计算一系列的总和?

    这是我的任务 在我的一生中 我似乎想不出办法来完成它 这是我到目前为止的代码 sum 0 k 1 while k lt 0 0001 if k 2 1 sum sum 1 0 k else sum sum 1 0 k k k 1 print
  • Python - 如何在没有引号和空格的情况下将字符串写入文件?

    是否可以写入不带引号和空格的文件字符串 列表中任何类型的空格 例如我有这样的列表 blabla 10 something 我怎样才能写入文件 使文件中的行变成这样 blabla 10 something 现在 每次我将其写入文件时 我都会得
  • 如何根据模式先决条件设置 Makefile 目标?

    我在 makefile 中有一系列模式依赖项 最后它们应该放在一个文件中 例如 x gt y gt onefile z 所以我制作了这样的文件 touch a x b x 和规则 y x some other script touch on
  • 对于大文件,fread 会失败吗?

    我必须分析一个 16 GB 的文件 我正在使用顺序阅读文件fread and fseek 可行吗 将要fread 处理这么大的文件 你没有提到语言 所以我假设是 C 我没有看到任何问题fread but fseek and ftell可能有
  • 如何从 VBA 创建单独的 CSV 文件?

    我需要将一些结果输出为 csv 文件 稍后由另一个进程解析 为了产生这些结果 我有一本巨大的工作簿 其中包含我需要的所有宏和函数 是否可以从 VBA 创建 单独的 csv 文件 是否可以使用 VBA 功能来写入它 而不仅仅是以 原始文本 方
  • Android 和客户端证书

    我已经寻找这个问题几个星期了 似乎无法在任何地方找到答案 我正在尝试为 Android 执行以下操作 此代码来自我编写的 C 应用程序 但我正在将其移植到 Android Web 端点需要将证书附加到相互身份验证的请求中才能进行 Web 服
  • PyCrypto : AssertionError("PID 检查失败。fork() 后必须重新初始化 RNG。提示:尝试 Random.atfork()")

    我正在创建执行不同任务的各种流程 其中之一 而且只有一个 具有创建 PyCrypto 对象的安全模块 所以我的程序启动 创建各种进程 处理消息的进程使用安全模块进行解密 我收到以下错误 firstSymKeybin self cipher
  • 为什么 Node.js 的 fs.readFile() 返回缓冲区而不是字符串?

    我正在尝试阅读以下内容test txt 位于 Javascript 源代码的同一文件夹中 并使用以下代码显示它 var fs require fs fs readFile test txt function err data if err
  • iPhone 上的 OpenGL 渐变填充看起来有条纹

    当我使用 OpenGL 绘制渐变填充时 输出看起来是条纹的 即它仅使用大约四分之一的可能颜色进行渲染 所有颜色都会出现在渲染缓冲区中 但不会出现在实际输出中 我正在运行 iOS4 的 iPhone 3G 上进行开发 有任何想法吗 Peter
  • 如何在 R 中永久更改 .libPaths() ?

    每当我使用以下命令更改库路径顺序时 libPaths 功能 如果我重新启动 R 它会恢复为默认值 如何永久更改此设置 我正在Linux计算集群上工作 我没有管理员权限 所以我想将我的本地库永久添加到R中 每次启动 R 时我都必须这样做 li
  • 如何捕获“远程服务器返回错误:(403) 禁止”的异常。

    我收到 远程服务器返回错误 403 禁止 错误并想捕获这个异常 我猜想 HttpException 块应该捕获它 如下所示 但事实并非如此 catch HttpException wex if wex GetHttpCode ToStrin
  • post-commit 挂钩在 svn commit 上产生错误,但在命令行上手动运行时有效

    我目前正在尝试为我的颠覆存储库设置提交后挂钩以发送电子邮件通知 我正在使用颠覆1 7 8 我的提交后挂钩脚本如下 bin sh REPOS 1 REV 2 REPOS hooks mailer py commit REPOS REV REP
  • 显示向量寄存器的约定

    是否有显示 写入大型寄存器的约定 例如英特尔 AVX 指令集中提供的寄存器 例如 如果最低有效字节为 1 最高有效字节为 20 其他位置为 0xmm寄存器 对于按字节显示是以下首选 小端 1 0 0 0 0 20 或者这是首选 20 0 0
  • 实体框架 4.1 - 如何“强制”EF 转到数据库而不是使用图形?

    这是场景 我有一个网站 在单个 HTTP 请求 HTTP POST 中 我需要执行以下操作 抓住一个物体 比方说 标签 保存其他一些对象 假设 问题 获取 标签 的新副本 重定向到另一个页面 该页面需要 标签 的新副本 在幕后 2 涉及影响
  • 支持 IAccesible 接口以在文本编辑器中移动插入符号的正确解决方案是什么?

    我想从头开始实现一个支持 IAccessible 接口的文本编辑器 我正在使用 MFC 和 Win32 API 当记事本等标准文本编辑器中的插入符号位置发生变化时 讲述人 JAWS 等客户端工具将发音与插入符号移动相对应的字母 单词或行 我