【发布时间】:2010-12-09 06:12:42
【问题描述】:
我想以编程方式获取正在运行的(桌面)应用程序的列表,然后我想将此列表显示给用户。它应该类似于 Windows 任务管理器中显示的应用程序列表。
如何在 C# 中创建它?具体来说,我需要一种方法来获取当前正在运行的应用程序的列表。
【问题讨论】:
我想以编程方式获取正在运行的(桌面)应用程序的列表,然后我想将此列表显示给用户。它应该类似于 Windows 任务管理器中显示的应用程序列表。
如何在 C# 中创建它?具体来说,我需要一种方法来获取当前正在运行的应用程序的列表。
【问题讨论】:
您可以使用Process.GetProcesses method 提供有关当前在您的计算机上运行的所有进程的信息。
但是,这会显示所有正在运行的进程,包括那些不一定显示在任务栏上的进程。所以你需要做的是过滤掉那些有空MainWindowTitle的进程。上面链接的文档解释了为什么这样做:
一个进程有一个关联的主窗口 仅当该过程具有 图形界面。如果相关联 进程没有主窗口 (因此 MainWindowHandle 为零), MainWindowTitle 是一个空字符串 ("")。
因此,您可以使用类似于以下代码的代码,它将打印出(到控制台窗口)任务栏上可见的所有当前正在运行的应用程序的列表:
Process[] processes = Process.GetProcesses();
foreach (var proc in processes)
{
if (!string.IsNullOrEmpty(proc.MainWindowTitle))
Console.WriteLine(proc.MainWindowTitle);
}
【讨论】:
EnumWindows function 枚举顶级窗口。调用此函数并指定一个指向回调函数的指针。屏幕上的每个顶级窗口都会调用一次回调函数。
MonitorFromWindow 函数,传入一个窗口句柄 (HWND) 并获取一个监视器句柄 (HMONITOR)。您可以在 .NET 中 P/Invoke 它,也可以直接从 WinForms 使用 System.Windows.Forms.Screen.FromPoint。