ListViewGetContent

返回列表视图中的项目/行列表.

List := ListViewGetContent(Options, Control, WinTitle, WinText, ExcludeTitle, ExcludeText)

参数

Options

类型: 字符串

指定检索什么. 如果为空或省略, 则检索 ListView 中的所有文本. 否则, 指定零个或多个下列单词, 每个单词之间用空格或制表符分隔:

Selected: 只返回选中(突出显示) 的行, 而不是所有行. 如果没有, 则返回值为空.

Focused: 只返回聚焦行. 如果没有, 则返回值为空.

Col4: 仅获取第四列(字段) 而不是所有列(把 4 替换为您选择的数字).

Count: 返回 ListView 中的总行数.

Count Selected: 返回选中(高亮显示) 行的数量.

Count Focused: 返回聚焦行的行号(位置)(如果没有, 则返回 0).

Count Col: 返回控件中的列数(如果无法确定列数, 则返回 -1).

Control

类型: 字符串, 整数对象

控件的 ClassNN, 文本或 HWND, 或具有 Hwnd 属性的对象. 有关详情, 请参阅 Control 参数.

WinTitle

类型: 字符串, 整数对象

识别目标窗口的窗口标题或其他条件. 请参阅 WinTitle.

WinText

类型: 字符串

如果存在, 此参数必须是目标窗口的单个文本元素的子字符串(和内置的 Window Spy 工具显示的一样). 如果 DetectHiddenText 为 ON, 那么会检测隐藏文本元素.

ExcludeTitle

类型: 字符串

标题中含有此参数值的窗口将被排除.

ExcludeText

类型: 字符串

文本中含有此参数值的窗口将被排除.

返回值

类型: 字符串

此函数从 ListView 返回项目/行的列表. 在每一行中, 除最后一个字段外的每个字段(列) 都将以制表符(`t) 结尾. 若要分别访问项目/行, 请使用 parsing loop, 如示例 #1 所示.

错误处理

如果找不到窗口或控件, 则抛出 TargetError.

如果消息无法发送到控件, 或拥有 ListView 的进程无法打开, 这可能是由于缺少用户权限或因为它已被锁定, 则抛出 OSError.

如果 ColN 选项指定不存在的列, 则抛出 ValueError.

备注

一些应用程序将其 ListView 文本单独存储, 从而防止检索它们的文本. 在这些情况下, 通常不会抛出异常, 但是所有检索到的字段都是空的.

ListView 中的列可以通过 SendMessage 调整大小, 如下例所示:

SendMessage(0x101E, 0, 80, "SysListView321", WinTitle)  ; 0x101E 是 LVM_SETCOLUMNWIDTH 消息.

在上面, 0 表示第一列(第二列指定 1, 2 为第三列, 依此类推). 此外, 80 是新宽度. 用 -1 替换 80 以自动调整列大小. 将其替换为 -2 即可执行相同操作, 但还要考虑标题文本的宽度.

窗口标题和文本是区分大小写的. 除非 DetectHiddenWindows 被打开, 否则不会检测隐藏窗口.

ControlGetItems, WinGetList, Control 函数

示例

从 ListView 中提取各个行和字段.

List := ListViewGetContent("Selected", "SysListView321", WinTitle)
Loop Parse, List, "`n"  ; 行由换行符(`n) 分隔.
{
    RowNumber := A_Index
    Loop Parse, A_LoopField, A_Tab  ; 每行中的字段(列) 由制表符(A_Tab) 分隔.
        MsgBox "Row #" RowNumber " Col #" A_Index " is " A_LoopField
}
unixetc