代码之家  ›  专栏  ›  技术社区  ›  Joel

C#-获取打开的任务列表

  •  10
  • Joel  · 技术社区  · 17 年前

    过程 . 我只希望任务显示在任务栏上。

    此外,如果我能得到与任务相关联的流程,那就太酷了。如果可能,获取Vista用于ALT-TAB菜单的缩略图,如下图所示:

    alt-tab

    我假设我将不得不使用pinvokes,因为它看起来真的没有任何库可以做到这一点。有什么想法吗?

    4 回复  |  直到 8 年前
        1
  •  5
  •   Asher    17 年前

    从API(Win32)的角度来看,没有任务(至少不是Windows任务管理器/Alt选项卡显示的任务)。

    enumerate the windows (这是电话号码 PInvoke 为了它)。

    然后查看窗口的样式,以确定它们是否实际上是顶级窗口。

        3
  •  1
  •   abelenky    17 年前

    我没有试过,但我怀疑是这样的:

    using System.Diagnostics;
    static void MyFunc()
    {
        Process[] processes = Process.GetProcesses();
        foreach(Process p in processes)
        {
           if (p.MainWindowHandle != 0)
           { // This is a GUI process
           }
           else
           { // this is a non-GUI / invisible process
           }
        }
    }
    

    关键是要检查每个进程的WindowHandle。

        4
  •  0
  •   Kay Zed    15 年前

    我怀疑这并不能涵盖所有情况,例如,有些进程有几个顶级窗口(都出现在任务管理器中)。 例如,考虑Firefox、Windows资源管理器、IE等。这些应用程序可以在桌面上有多个窗口。

    @丹C。

    这样做:

    p.ProcessName != "explorer"
    

    你觉得还好吗?闻起来很难闻。

    推荐文章