我正在制作一个“简单”程序来关闭我在 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 进程?