如何检查我的机器上是否打开了另一个应用程序窗口(即,遍历所有打开的窗口)
本文关键字:窗口 何检查 遍历 应用程序 机器 我的 是否 检查 另一个 | 更新日期: 2023-09-27 17:54:54
我有一个应用程序,将一系列文本文件写入用户机器上的文件夹。然后提示用户是否要打开文件夹查看所有文件。我使用System.Diagnostics.Process.Start()来做这件事,它工作得很好。然而,如果已经有一个窗口与该文件夹打开,我只是想重用该窗口,而不是打开另一个。帮助保持东西整洁。
任何想法?
Update: I tried this:
if (MessageBox.Show("Compiled! Open folder?", "Compile Done", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes)
{
ProcessStartInfo Info = new ProcessStartInfo("explorer", Path);
Info.UseShellExecute = false;
Process.Start(Info);
}
但是它仍然打开一个新窗口。我还尝试设置UseShellExecute为true,我得到了一个新窗口打开的相同结果。
刚刚在Windows XP上试过:
System.Diagnostics.Process.Start(@"C:'Dev");
System.Threading.Thread.Sleep(10000);
System.Diagnostics.Process.Start(@"C:'Dev");
它打开了我的C:'Dev文件夹。然后我把注意力放在别处。10秒后,C:'Dev窗口闪烁并再次高亮显示。那么,在不能工作的地方,你做了什么不同的事情?
(试图找出是否有一个打开的窗口显示一个特定的文件夹是令人担忧和容易出错的。我不推荐它)
如果您使用ShellExecute()
打开文件夹,则资源管理器将为您完成工作,并且如果存在的话,可以重用打开的资源管理器窗口。
.net调用ShellExecute()
的方法是设置传递给Process.Start()
的ProcessStartInfo
对象的UseShellExecute
属性。
现在张贴你的代码,我可以看到问题。你应该让系统打开文件夹,而不是尝试启动一个新的explorer.exe进程,如下所示:
ProcessStartInfo Info = new ProcessStartInfo(Path);
Process.Start(Info);