You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何控制Windows讲述人读取Win32 ListView的自定义文本

为Win32 ListView添加讲述人自定义读取文本的实现方案

Windows讲述人这类辅助技术不依赖WM_GETTEXT这类常规消息,而是基于UI Automation(UI自动化)框架来获取控件的辅助信息。要给ListView项添加自定义描述(比如应用定义的项类型),可通过以下两种方式实现:

1. 利用ListView的LVN_GETINFOTIP通知(轻量级方案)

当辅助技术请求控件的扩展提示信息时,系统会向ListView的父窗口发送LVN_GETINFOTIP通知。你可以在回调函数中填充自定义内容:

  • 获取当前项的自定义类型信息
  • 将其与原有列表项标题拼接,写入NMLVGETINFOTIP结构体的pszText字段

示例代码片段:

case LVN_GETINFOTIP:
{
    NMLVGETINFOTIP* pInfoTip = reinterpret_cast<NMLVGETINFOTIP*>(lParam);
    // 自行实现获取当前项自定义类型的逻辑
    const wchar_t* itemType = GetCustomItemType(pInfoTip->iItem);
    // 拼接标题与自定义类型
    swprintf_s(pInfoTip->pszText, pInfoTip->cchTextMax, L"%s - %s", pInfoTip->pszText, itemType);
    return 0;
}

2. 实现UI Automation Provider(灵活扩展方案)

如果需要更精细的控制(比如让讲述人分模块读取不同信息),可以为ListView实现自定义UI自动化提供者:

  • 继承并实现IRawElementProviderSimple、ISelectionItemProvider等接口
  • 在GetPropertyValue方法中,返回自定义的辅助属性(比如合并标题与类型的NameProperty,或单独的类型描述HelpTextProperty)
  • 通过处理WM_GETOBJECT消息,向UI自动化框架返回自定义Provider实例

关键说明

  • WM_GETTEXT仅能获取控件的基础文本,无法满足辅助技术所需的结构化或扩展信息需求
  • 优先使用LVN_GETINFOTIP,这是针对ListView的原生扩展方案;若需更复杂的自定义逻辑,再考虑实现UI Automation Provider

内容的提问来源于stack exchange,提问作者Eugene Mayevski 'Callback

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 15:25:56