【问题标题】:On Windows XP, how do I enumerate all the windows displayed by the system (C#)在 Windows XP 上,如何枚举系统显示的所有窗口(C#)
【发布时间】:2009-01-06 13:54:34
【问题描述】:

我想最终得到所有可见(包括最小化)窗口的列表(或数组或其他)。

我发现了 2 个类似的问题,但没有给我我想要的东西:
- Work out which windows go in the alt-tab list
- list windows in another user's session

谢谢。

【问题讨论】:

    标签: c# windows


    【解决方案1】:

    我认为 Raymond Chen 在第一个链接中指出的博客条目让您知道您想去哪里。基本上,您会调用 EnumWindows,然后应用该算法,但您会记下每个可见的窗口句柄。

    这个问题有点模糊,这里的目的是什么(如果提供更多信息,可能会有更好的方法)。

    【讨论】:

    • 我看不到。也许我是盲人(或者只是疯了)。你能推荐几行代码吗?
    【解决方案2】:

    如何获取将进入 alt-tab 列表的进程列表。 (运行包含窗口的进程):

    using System.Diagnostics.Process; 
    
    List<Process> plist = new List<Process>();            
    
    foreach (Process p in Process.GetProcesses())
    {
     string title = p.MainWindowTitle;
     if (!String.IsNullOrEmpty(title))
     {
         plist.Add(p);
     }
    }
    

    【讨论】:

    • 理论上你做对了,但是你的代码有两个错误。首先,创建列表时出现语法错误: List plist = new List();其次,在您的 if 语句中,如果您只检查标题是否为空,您将获得所有进程。如果 (!String.IsNullOrEmpty(title)) 有效。
    • 感谢您注意到 - 我修复了代码。我想这就是当你在 SO 中敲出代码而不先测试时会发生的情况 =)
    【解决方案3】:

    只需使用 EW() api(win32 常见问题解答)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-02
      • 2012-12-05
      • 1970-01-01
      相关资源
      最近更新 更多