【发布时间】:2020-09-09 18:14:35
【问题描述】:
当涉及到 Windows 7 任务管理器时,我很容易获得进程计数等,因为进程存储在传统的列表视图控件中,我可以使用 SendMessage 函数访问该控件。然而,对于 explorer/win10 任务管理器/等,存储进程的列表控件似乎不是传统控件,似乎是自定义控件。我想知道是否有关于 Microsoft 在其较新的系统应用程序中使用的自定义控件的任何文档,和/或我是否可以使用 SendMessage 或类似我之前所做的类似的东西访问它们?
//Get the handle of the list..you can find the handle in win7&10 pretty easily
FindWindowExA(...parent,IntPtr.Zero,"SysListView32","Processes");//=listview handle
//Sending a message to get the number of processes for instance, works in windows 7 only
SendMessageA(process list handle,(IntPtr)0x1004,IntPtr.Zero,null);//=process count
如果没有,是否值得尝试调试我自己如何访问列表,或者这是一个坏主意?为什么?我有一个 c# 应用程序,使用 PInvoke 移植 C++ 方法没有问题。谢谢
【问题讨论】:
-
您能选择一种语言吗?
-
为什么要从任务管理器中获取该列表?只需使用docs.microsoft.com/en-us/windows/win32/psapi/…
-
从任务管理器获取进程列表听起来很……奇怪。为什么不能通过代码stackoverflow.com/questions/648410/… 正常执行此操作?
-
Alexei Levenkov 我不想只获取进程列表。我想访问进程列表(包括内存、cpu 等)的控制句柄,并让我可以完全访问列表视图,就像我之前对 Windows 7 所做的那样,此外,列表非提升任务管理器上显示的进程数有时与 Process.GetProcesses().Where(owner==environment.username) 不同,因此更准确。不管我的目标是不可变的
-
(题外话:当你删除它时,我正要回答你的另一个问题stackoverflow.com/questions/64070927/…。它可能是重复的,所以不能重新打开,但godbolt.org/z/rcWcox 表明编译器在练习。有关内存源操作数性能的更多信息,另请参阅Micro fusion and addressing modes 和agner.org/optimize。)