gpt4 book ai didi

c# - 等到进程结束

转载 作者:行者123 更新时间:2023-11-30 17:53:19 25 4
gpt4 key购买 nike

你好,我必须编写程序,它必须打开一些系统属性,例如:

Process sound = new Process();
sound.StartInfo.FileName = "mmsys.cpl";
sound.Start();

// Place 1

Process device = new Process();
device.StartInfo.FileName = "hdwwiz.cpl";
device.Start();

// Place 2

// Other Code doing sth

这很好用,但我的问题是我必须首先运行 mmsys.cpl,等待用户检查他必须做什么,然后在关闭窗口后运行 hdwwiz.cpl。

所以在 //Place 1 我写道:

sound.WaitForExit();

但这行不通,因为 mmsys.cpl 只是快捷方式并作为进程“explorer.exe”运行,而 hdwwiz.cpl 作为“mmc.exe”运行,因此命令不会等到关闭该窗口,然后同时运行一次。

有什么方法可以让某事像我想要的那样吗?

最佳答案

你正在运行的是control panel files .遗留进程,如 mmsys.cpl 托管在名为 rundll32.exe 的进程中,您可以使用以下方式轮询这些进程的列表:

Process[] processes = Process.GetProcessessByName("rundll32.exe");

并对这些Process 对象调用WaitForExit。您可以对较新的基于 mmc.exe 的 .CPL 执行相同的操作。

显然,如果同时运行多个控制面板小程序,这不是一个很好的解决方案。在这种情况下,您或许可以警告用户关闭其他的。

其他更复杂的解决方案可能涉及使用 pinvoke 调用 Win32 函数 EnumWindows获取顶级窗口的列表并 Hook 它们以观察 WM_CLOSE 消息。

关于c# - 等到进程结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17505032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com