如何查找Voice Access调用的文本相关函数及调用顺序?
Voice Access文本相关命令调用流程与问题排查
一、调用流程的参考资源与获取方式
- 核心参考是微软官方的UI Automation Provider SDK文档,Voice Access所有文本类语音命令都是基于这套规范与应用交互的,里面明确了各类文本操作对应的接口调用逻辑。
- 聚焦文本操作的话,重点看
TextPattern和TextRangePattern的官方说明,不同命令的调用链都是这些接口的组合:- 比如“Select paragraph”的大致流程:
GetVisibleRanges→GetText→FindText(匹配段落边界)→ExpandToEnclosingUnit(扩展到段落)→Select - “Delete selected text”的基础流程:
GetSelection→Delete(调用TextRange的Delete方法)
- 比如“Select paragraph”的大致流程:
- 用Windows SDK自带的Inspect.exe和UI Automation Verify工具,能实时捕获Voice Access与你的程序之间的接口调用序列,录制命令执行过程就能反向推导其他命令的完整调用链,比纯文档更实用。
二、Delete命令无响应的排查方向
- 先确认是否完整实现了
TextRangeProvider的Delete方法,这个是删除操作的核心接口,要正确处理文本范围删除,同步更新控件的实际文本和选择状态。 - 检查调用
Delete后是否触发了必要的UI Automation事件,比如TextPatternTextChangedEvent和TextPatternSelectionChangedEvent,Voice Access靠这些事件确认操作成功。 - 排查Windows消息处理:Delphi文本控件要确保
WM_GETOBJECT消息被正确处理,能返回你的自定义Provider实例,否则辅助技术的请求无法传递到你的实现代码。 - 手动测试
Delete方法:直接调用你实现的接口,看是否能正常删除文本并更新控件状态。如果手动调用有问题,就是接口实现bug;如果手动正常,那要断点检查Voice Access传递的文本范围偏移量是否符合你的处理逻辑。
内容的提问来源于stack exchange,提问作者Pablo Bähler
相关产品推荐
相关产品推荐

