0

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

4

1 回答 1

0

在 Windows 10 中(也许 8 也有这个,我不记得了),任务管理器有一个“进程”选项卡,它将进程分为至少 3 个类别,应用程序/后台进程/Windows 进程。我的猜测是您想杀死应用程序。

似乎这项工作的方式是让任务管理器检查每个进程是否具有顶级窗口。我不是很熟悉如何做到这一点,但似乎Process.MainWindowHandle可能是一个开始的地方。

于 2017-03-29T00:07:16.590 回答