从任务管理器详细信息列表视图中获取项目

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 自动化。

以上是关于从任务管理器详细信息列表视图中获取项目的主要内容,如果未能解决你的问题,请参考以下文章

windows 10打开任务管理器怎么选择关系设置

如何在任务管理器中获取用户列表

访问 Windows 10 任务管理器进程列表

在任务管理器 C# 中提交进程的大小

如何从 Windows 任务管理器(应用程序选项卡)获取应用程序 + 从 Delphi 获取它们在 HDD 上的位置

win7任务管理器 内存相关项目的解释