我正在制作一个“简单”程序来关闭我运行的Windows 10上的所有活动应用程序,例如Chrome,Outlook,Notepadd ++等。经过大量搜索后,我遇到了这段代码:
foreach (Process p in Process.GetProcesses(Environment.MachineName))
{
if ((p.Id != CurrentProcess.Id && p.MainWindowHandle != IntPtr.Zero))
{
p.kill();
}
}
首先它要求进程与p.CloseMainWindow()很好地关闭,然后在返回异常时终止进程。我知道它并不理想,但这在大多数情况下都有效。
运行我的程序时,它会关闭我的所有应用程序和一些底层Windows应用程序/进程,因为屏幕,任务栏和桌面会变黑并刷新一秒钟。
我的问题是,超过一半的时间我运行这个程序,我得到一个Win32Exception,程序将无法完成关闭任何打开的东西。
我在这里猜测是因为我没有足够的权限来关闭Windows后台进程,即使是以管理员身份运行,这也是我得到异常的原因。
每次kill之后,我都会让我的程序进入休眠状态一小段时间,让进程有时间关闭,以避免在终止进程上调用kill,这也会引发异常。也许时间不够,我使用的是250毫秒间隔。
TL; DR 有没有办法关闭我(用户)打开的所有内容(或任务栏中的所有内容)并单独保留主Windows进程?
答案 0 :(得分:0)
在Windows 10中(也许8也有这个,我无法记住),任务管理器有一个"进程"选项卡,用于分割至少3个类别的进程,即应用程序/后台进程/ Windows进程。我的猜测是你要杀死应用程序。
似乎这项工作的方式是让任务管理器检查每个进程是否都有一个顶级窗口。我对如何做到这一点并不十分熟悉,但似乎Process.MainWindowHandle可能是一个可以开始的地方。