【发布时间】:2011-03-25 07:52:17
【问题描述】:
有没有办法检测和存储所有打开窗口的位置和大小,以及它们的状态(最小化、最大化等)
我从未开发过以这种方式从实际操作系统中获取信息的任何东西。是否需要调用 Windows API 并涉及非托管代码?
如果不清楚,请发表评论,我会尽力详细说明。
【问题讨论】:
有没有办法检测和存储所有打开窗口的位置和大小,以及它们的状态(最小化、最大化等)
我从未开发过以这种方式从实际操作系统中获取信息的任何东西。是否需要调用 Windows API 并涉及非托管代码?
如果不清楚,请发表评论,我会尽力详细说明。
【问题讨论】:
调用EnumWindows 循环遍历所有窗口,然后调用GetWindowPlacement 获取信息。它需要 PInvoke 到 Windows API,但这并不难,只需在 PInvoke 站点上找到所有信息即可。
顺便说一句,这是一篇codeproject 文章,用于查找特定窗口并获取/设置它的显示状态,这可能是一个很好的起点(代码在 VB.Net 中,但您可能只使用其中一个如果您不了解 VB.Net,请在线 VB.Net 到 C# 转换器)
【讨论】:
是的,您将从 EnumWindows 开始: http://msdn.microsoft.com/en-us/library/ms633497.aspx
有关获取所需信息的方法,请参阅窗口函数列表: http://msdn.microsoft.com/en-us/library/ff468919.aspx
【讨论】:
System.Diagnostics.Process 类可为您提供所需的大量信息。你可以试试。
Process[] currentProcesses = Process.GetProcesses();
Console.WriteLine("MainWindowTitle: {0}",currentProcesses[0].MainWindowTitle);
Console.WriteLine(currentProcesses[0].StartInfo.WindowStyle);
我不确定它是否能满足您的所有需求。但是 Process 类能够提供有关当前正在运行的进程的大量信息。 在转向 API 之前,最好先了解一下 Process 类。
【讨论】: