获取应用程序所有打开的窗口
2010-06-11 08:08 观海看云 阅读(766) 评论(0) 编辑 收藏 举报using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace CH5
{
public partial class CH5_DemoForm001 : Form
{
public CH5_DemoForm001()
{
InitializeComponent();
}
private void CH5_DemoForm001_Load(object sender, EventArgs e)
{
RefreshOpenFormCount();
}
private void btnGetOpenForms_Click(object sender, EventArgs e)
{
// 开启数个窗体并将它们最小化。
CH5_DemoForm002 myCH5_DemoForm002 = new CH5_DemoForm002();
myCH5_DemoForm002.Show();
myCH5_DemoForm002.WindowState = FormWindowState.Minimized;
CH5_DemoForm004 myCH5_DemoForm004 = new CH5_DemoForm004();
myCH5_DemoForm004.Show();
myCH5_DemoForm004.WindowState = FormWindowState.Minimized;
CH5_DemoForm005 myCH5_DemoForm005 = new CH5_DemoForm005();
myCH5_DemoForm005.Show();
myCH5_DemoForm005.WindowState = FormWindowState.Minimized;
// 取得所有已开启之窗体的标题。
GetOpenFormTitles();
// 取得已开启的窗体数目。
RefreshOpenFormCount();
}
private void GetOpenFormTitles()
{
try
{
string myFormTitle;
foreach (Form f in Application.OpenForms)
{
// 使用一个进程安全的方法来取得所有已打开的窗体的标题。
myFormTitle = GetFormTitle(f);
if (!(this.ListBox1.Items.Contains(myFormTitle)))
{
this.ListBox1.Items.Add(myFormTitle);
}
}
}
catch (Exception ex)
{
this.ListBox1.Items.Add("错误:" + ex.Message);
}
}
private delegate string GetFormTitleDelegate(Form f);
private string GetFormTitle(Form f)
{
// 检查窗体是否能够从目前的进程来访问。
if (!(f.InvokeRequired))
{
// 直接访问窗体。
return f.Text;
}
else
{
// 封送处理至拥有窗体的进程。
GetFormTitleDelegate del = GetFormTitle;
object[] param = { f };
System.IAsyncResult result = f.BeginInvoke(del, param);
// 让窗体的进程有机会来处理函数。
System.Threading.Thread.Sleep(10);
// 检查结果。
if (result.IsCompleted)
{
// 取得函式的传回值。
return "不同的进程:" + f.EndInvoke(result).ToString();
}
else
{
return "没有响应的进程";
}
}
}
private void btnCloseOpenForms_Click(object sender, EventArgs e)
{
try
{
System.Collections.Generic.List<Form> myList = new System.Collections.Generic.List<Form>(Application.OpenForms.Count - 2);
foreach (Form f in Application.OpenForms)
{
if (f.Name != "StartUpForm" && f.Name != "CH5_DemoForm001")
{
myList.Add(f);
}
}
foreach (Form f in myList)
{
this.ListBox1.Items.Remove(f.Text);
f.Close();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
RefreshOpenFormCount();
}
private void RefreshOpenFormCount()
{
this.lblOpenFormsCount.Text = Application.OpenForms.Count.ToString();
}
private void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
}
}
}
出处:http://www.cnblogs.com/zhangtao/
文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器