使用.NET(C#)获取所有打开窗口的位置和大小

时间:2010-08-04 15:06:32

标签: .net windows

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

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

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

3 个答案:

答案 0 :(得分:9)

调用EnumWindows循环浏览所有窗口,然后调用GetWindowPlacement以获取信息。它需要PInvoke到Windows API,但它并不困难,只需在PInvoke站点找到所有信息。

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

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

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