如何知道一个窗口是否已经消失
本文关键字:是否 窗口 消失 一个 何知道 | 更新日期: 2023-09-27 18:05:25
我想知道我是否能得到任何消息,说一个特定的打开的窗口已经消失了
清理:我打开一个记事本,输入一些文本,然后关闭它。我希望我的c#程序显示一条消息,说明我的窗口已经消失了。我是c#的新手,所以请建议一个或多个我可能需要研究的类,或者最好提供一个简短的示例来演示主要任务。我非常感谢你的帮助。
正如@Richard指出的那样,您需要FindWindow()
来监视任何窗口。在记事本的情况下,您可以做得更简单,因为记事本进程在窗口消失后立即终止。
你可以用Process.Start()
启动记事本,并在记事本完成时使用返回的Process
对象上的Exited
事件来运行代码:
Process notepad = Process.Start("Notepad", "c:'temp'text.txt");
notepad.Exited += MyExitEventHandler;
比较当前运行的进程列表和之前轮询中运行的进程
首先,添加这样的类成员来存储以后比较的过程:
List<string> lastRunningProcesses = new List<string>();
然后,开始轮询有这样的代码:
System.Timers.Timer timer = new System.Timers.Timer();
timer.Interval = 500; //half a second
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
timer.Start();
最后是轮询和比较代码:
void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
List<string> currentlyRunningProcesses = System.Diagnostics.Process.GetProcesses().ToList().ConvertAll(p => p.ProcessName);
if (lastRunningProcesses.Count > 0)
{
List<string> closedProcesses = lastRunningProcesses.FindAll(p => !currentlyRunningProcesses.Contains(p));
if (closedProcesses.Count > 0)
MessageBox.Show(string.Format("{0} process(es) have been closed:'n{1}", closedProcesses.Count, string.Join("'n", closedProcesses)));
}
lastRunningProcesses = currentlyRunningProcesses;
}
只要你的应用程序还在运行,它就会继续轮询。
您需要使用interop来完成此操作。创建一个调用FindWindow win32函数的计时器。
当这个停止查找窗口时,说明窗口已经消失