问题描述
我试图在标签 details
下获取任务管理器列表视图中的项目列表。
我可以使用 ListView_GetItemCount(hwnd)
(一种 winapi 方法)获取大多数信息,例如项目计数,它返回 260
,这是任务管理器列表视图中的进程列表,还可以使用 {{1 }} 成功地。
但是当我尝试获取项目的文本,或按字符串搜索,或获取项目或列的特定索引上的文本时,它只会返回空字符串。
ListView_GetColumn(hwnd)
问题是什么?不只显示文本是否受到保护?因为我可以得到其他一切。我可以使用什么方法来获取文本?
解决方法
携带结构指针的
ListView_...()
宏/LVM_...
消息(如 LVITEM*
)无法跨进程边界封送这些结构。这些宏/消息只能在拥有 ListView 的同一进程中使用。因此,您必须使用 LVITEM
在 TaskManager 进程中远程分配一个 VirtualAllocEx()
,发出 ListView_GetItem()
以填充该内存,然后使用 {{1} 将该数据编组回您自己的进程}}。不用说,像 TaskManager 这样的系统组件不太可能允许这样做。
您应该尝试改用 UI Automation 接口。它专为此类工作而设计。