【问题标题】:Get location and size of all open windows using .NET (C#)使用 .NET (C#) 获取所有打开窗口的位置和大小
【发布时间】:2011-03-25 07:52:17
【问题描述】:

有没有办法检测和存储所有打开窗口的位置和大小,以及它们的状态(最小化、最大化等)

我从未开发过以这种方式从实际操作系统中获取信息的任何东西。是否需要调用 Windows API 并涉及非托管代码?

如果不清楚,请发表评论,我会尽力详细说明。

【问题讨论】:

    标签: .net windows


    【解决方案1】:

    调用EnumWindows 循环遍历所有窗口,然后调用GetWindowPlacement 获取信息。它需要 PInvoke 到 Windows API,但这并不难,只需在 PInvoke 站点上找到所有信息即可。

    顺便说一句,这是一篇codeproject 文章,用于查找特定窗口并获取/设置它的显示状态,这可能是一个很好的起点(代码在 VB.Net 中,但您可能只使用其中一个如果您不了解 VB.Net,请在线 VB.Net 到 C# 转换器)

    【讨论】:

    • 谢谢,我有时会使用 VB.NET,在他们完全使用 C# 之前处理较旧的应用程序时
    【解决方案2】:

    是的,您将从 EnumWindows 开始: http://msdn.microsoft.com/en-us/library/ms633497.aspx

    有关获取所需信息的方法,请参阅窗口函数列表: http://msdn.microsoft.com/en-us/library/ff468919.aspx

    【讨论】:

      【解决方案3】:

      System.Diagnostics.Process 类可为您提供所需的大量信息。你可以试试。

              Process[] currentProcesses = Process.GetProcesses();           
              Console.WriteLine("MainWindowTitle: {0}",currentProcesses[0].MainWindowTitle);
              Console.WriteLine(currentProcesses[0].StartInfo.WindowStyle);
      

      我不确定它是否能满足您的所有需求。但是 Process 类能够提供有关当前正在运行的进程的大量信息。 在转向 API 之前,最好先了解一下 Process 类。

      【讨论】:

      • 谢谢,我不确定这是否能满足我的所有需求,但会在使用 API 之前对此进行调查。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-24
      相关资源
      最近更新 更多