您好,我必须编写必须打开一些系统属性的程序,例如:
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。
So in // Place 1
我写:
sound.WaitForExit();
但这不起作用,因为 mmsys.cpl 只是快捷方式并作为进程“explorer.exe”运行,而 hdwwiz.cpl 作为“mmc.exe”运行,因此该 comand 不会等到关闭该窗口,而是立即运行两者。
有什么办法可以让某物像我想要的那样吗?
你正在运行的东西被称为控制面板文件 http://support.microsoft.com/kb/313808。遗留的,比如mmsys.cpl
托管在一个名为的进程中rundll32.exe
您可以使用以下方式轮询这些进程的列表:
Process[] processes = Process.GetProcessessByName("rundll32.exe");
并打电话WaitForExit
在这些上Process
对象。您可以对较新的版本执行相同的操作mmc.exe
基于.CPL。
显然,如果同时运行多个控制面板小程序,这不是一个很好的解决方案。在这种情况下,您也许可以向用户发出警告,关闭其他警告。
其他更复杂的解决方案可能涉及使用 pinvoke 调用 Win32 函数EnumWindows http://msdn.microsoft.com/en-us/library/windows/desktop/ms633497%28v=vs.85%29.aspx获取顶级窗口的列表并挂钩它们以监视WM_CLOSE
信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)