从任务管理器详细信息列表视图中获取项目
Posted
技术标签:
【中文标题】从任务管理器详细信息列表视图中获取项目【英文标题】:Get items from taskmanager details listview 【发布时间】:2021-01-26 22:19:03 【问题描述】:我试图在details
标签下的taskmanager的listview中获取项目列表。
我可以使用ListView_GetItemCount(hwnd)
(一种winapi方法)获取大多数信息,例如项目计数,它返回260
,这是taskmanager listview中的进程列表,也可以使用ListView_GetColumn(hwnd)
成功获取标题计数。
但是当我尝试获取项目的文本,或按字符串搜索,或获取项目或列的特定索引上的文本时,它只会返回空字符串。
ListView_GetItem(hwnd, pitem)
问题是什么?不只显示文本是否受到保护?因为我可以得到其他一切。我可以使用什么方法来获取文本?
【问题讨论】:
ListView_GetItem
获取地址。你是从什么流程做这个的?如果不是来自 listview 所在的进程 - 这当然是行不通的。和主要 - 尝试这样做有什么意义?
我正在传递hwnd
,并且已经可以访问列表项计数和除文本之外的其他属性
问题的解决方法肯定是错误的。为什么不使用 API 来获取信息?
@DavidHeffernan 我打算根据 PID 选择和操作任务管理器列表本身以用于测试目的
【参考方案1】:
ListView_...()
宏/LVM_...
带有结构指针的消息,如LVITEM*
,不能跨进程边界编组这些结构。这些宏/消息只能在拥有 ListView 的同一进程中使用。因此,您必须使用VirtualAllocEx()
在TaskManager 进程中远程分配LVITEM
,发出ListView_GetItem()
来填充该内存,然后使用ReadProcessMemory()
将这些数据编组回您自己的进程。不用说,像 TaskManager 这样的系统组件不太可能允许这样做。
您应该尝试改用UI Automation 接口。它是为此类工作而设计的。
【讨论】:
我已经可以通过,我以管理员身份运行。只是文本内容有问题 获取计数很容易,因为它只是一个整数,可以直接在消息的返回值中携带。但是跨流程边界封送实际数据需要更多工作。 我可以删除项目,甚至清除视图。注入会引发防病毒软件的问题 @Abraham:你实际上有很多选择。根据您想要的列,更直接地检索它可能更容易,而不是通过任务管理器。 @Abraham 你确实有选择。我什至给了你一种选择——UI 自动化。以上是关于从任务管理器详细信息列表视图中获取项目的主要内容,如果未能解决你的问题,请参考以下文章