等待进程启动

6
我想做的是从我的程序中启动资源管理器,然后将我的应用程序弹回到资源管理器前面或者只是在我的应用程序后面启动资源管理器...

当前我已经成功地启动了资源管理器,但是我需要采取一些操作来把我的应用程序放到最前面。 但由于资源管理器启动需要几秒钟,这会打乱我的整个事件链。
以下就是我目前所做的内容:
 Process process = new Process();
 process.StartInfo.FileName = environmentVariable + "\\explorer.exe";
 process.StartInfo.Arguments = !string.IsNullOrEmpty(this.uxMainFolder.Text) ? this.uxMainFolder.Text + "\\" + path2 : Path.Combine("R:\\Project", path2);

 try
 {
      process.Start();

      this.WindowState = FormWindowState.Minimized;
      this.Show();
      this.WindowState = FormWindowState.Normal;
 }
 finally
 {
      process.Dispose();
 }

任何您能提供的关于这个问题的线索都将不胜感激。
编辑:我正在寻找一些事件,可以在资源管理器加载后调用TopMost或我的最小化/显示/正常方法。
该程序生成一个项目目录,并为每种项目类型生成所需的所有文档,然后在资源管理器中弹出该目录。
这旨在为想要一次创建10或20个项目的用户带来生活质量的改变。

5
如果您能告诉我们“在我的应用程序后启动资源管理器”是您提出的解决方案的问题,我们可能能够提供更具建设性的帮助。 - Damien_The_Unbeliever
表单的TopMost属性不是你要找的吗? - cillierscharl
“将我的应用程序弹回到资源管理器前面,或者只是在我的应用程序后面启动资源管理器”这个语句并没有太多意义,因为没有什么东西可以“在资源管理器前面”或“在资源管理器后面”,资源管理器通常只有任务栏和任何目录窗口是可见的元素。请解释您要解决的问题,而不是解决问题的解决方案的问题。 - Scott Chamberlain
我正在寻找一些事件,可以在加载资源管理器后调用“TopMost”或我的最小化/显示/正常方法。我尝试做到这一点的原因是这是有关我的程序的主要投诉之一,它生成每种项目类型所需文档的项目目录。我当前实现的问题是他们可能想要在一个坐姿中创建10或20个项目,我认为这将是一个简单的生活质量改变。 - Mytheral
但是如果您将窗口放在应用程序窗口后面,他们该如何做到呢?老实说,这听起来大多数情况下就像您拥有的是“创建目录、打开窗口、进行更多操作,然后用户可以接管并执行操作”,而您应该改变的是“创建目录、进行更多操作,现在打开窗口,然后用户可以接管并执行操作”。 - Damien_The_Unbeliever
显示剩余3条评论
1个回答

7

丑陋的方法

通常,当等待一个进程完成加载时,您会调用

Process.WaitForInputIdle()

来自MSDN

使进程组件无限期地等待关联的进程进入空闲状态。此重载仅适用于具有用户界面和消息循环的进程。

使用 explorer.exe 很可能不起作用,因为该进程经常生成子进程并立即死亡。

解决方法是启动进程,Sleep 等待250-500毫秒,然后使用某些可怕的黑客找到新的 Process,然后在该 Process 上调用 WaitForInputIdle

另一种方法

如果您愿意将 explorer.exe 最小化启动,可以这样做:

ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = "explorer.exe";
psi.Arguments = "/separate";
psi.UseShellExecute = true;
psi.WindowStyle = ProcessWindowStyle.Minimized;
Process.Start(psi);

4
要么这样,要么在开始处理之前在您的窗体上注册LostFocus事件并使其持续一段时间。即注册一个新的LostFocus事件,在失去焦点时将焦点重新设置为您的窗体,开始处理,启动一个计时器,其唯一目的是在500毫秒或其他任意时间后删除您刚刚注册的LostFocus事件。 - wilso132
@wilso132 为什么不把那个写成一个答案呢? - Rotem
1
请将以下与编程相关的内容从英文翻译成中文。只返回翻译后的文本:它太丑,不适合用作“回答”。 :) - wilso132

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接