其他分享
首页 > 其他分享> > 2021-01-02

2021-01-02

作者:互联网

【C#】将win10任务视图功能升级成任务管理器

这是一个旨在改善windows平板的桌面应用使用体验的程序

对于正常的win10桌面模式来说,任务视图的所有功能都可以用任务栏来替代,显得这个功能很没用。
同时,对于win10的平板模式,任务视图只能关闭窗口,很多桌面应用程序都会有后台进程,导致平板模式下运行某些桌面应用体验极差。虽然任务视图使用起来很方便,但不能想安卓的任务视图那样直接清理后台进程。
我写了这个程序,主要就是为了改善surface和其他windows平板的桌面应用体验。

它是如何实现的

这个程序的原理很简单,就是将某些程序的后台进程组成一个名单,然后每隔一段时间(我设置为1秒)检测这些进程用没有正在运行,如果正在运行,就打开一个完全透明的窗体,这个窗体会出现在任务视图中但不会出现在任务栏中。同时订阅这个窗体的Closing事件,kill对应的进程。

var runnings = from process in Process.GetProcesses()
                           select process.ProcessName;
            var morthereds = new List<string>();
            HousemaidOptions.MotheredProcesses.ForEach(i =>morthereds.Add(i));

            foreach (var processName in morthereds)
            {
                if (!AcceaccessoriesDictionary.ContainsKey(processName))
                {
                    if (runnings.Contains(processName))
                    {
                        AttachedWindow acce = new AttachedWindow(processName);
                        acce.Closed += AcceaccessoryClosed;
                        acce.StateChanged += CallContorlPanel;
                        AcceaccessoriesDictionary.Add(processName,acce);
                        acce.Show();
                    }
                }
                else
                {
                    if (!runnings.Contains(processName))
                    {
                        AcceaccessoriesDictionary[processName].Close();
                        AcceaccessoriesDictionary.Remove(processName);

                        GC.Collect();//强制进行垃圾回收
                    }
                }
            }

            var acceKyes = new List<string>(AcceaccessoriesDictionary.Keys);

            foreach(var acceKey in acceKyes)
            {
                if((AcceaccessoriesDictionary[acceKey] as AttachedWindow).IsClosed)
                {
                    AcceaccessoriesDictionary.Remove(acceKey);

                    GC.Collect();//强制进行垃圾回收
                }

                if (!morthereds.Contains(acceKey))
                {
                    (AcceaccessoriesDictionary[acceKey] as AttachedWindow).Handled = true;
                    AcceaccessoriesDictionary[acceKey].Close();
                    AcceaccessoriesDictionary.Remove(acceKey);

                    GC.Collect();//强制进行垃圾回收
                }

AcceaccessoriesDictionary是一个Dictionary<string, Window>,用于存放所有窗体,通过把进程名作为key获取相应的窗体对象。

private Dictionary<string, Window> AcceaccessoriesDictionary = new Dictionary<string, Window>();

实际使用效果


使用效果如上图↑ 单击后台进程上的X就可以直接结束进程
在这里插入图片描述
如果你呼出这些透明的窗体,实际上它们并不会出现,而是打开这个程序的控制面板,在这个控制面板上你可以看到所有的进程,可以手动将进程添加监管或是取消监管,你自定义的名单将会存储在程序同目录下的Options.ini中。

性能和资源占用情况

实测下来内存占用一般在15-30MB,CPU占用可以忽略不计。
在这里插入图片描述

源代码:

v1.0

链接:https://pan.baidu.com/s/1wFpZ4_fpnXsuxJAjV-6TIg
提取码:ibi4
复制这段内容后打开百度网盘手机App,操作更方便哦

已编译的exe程序:

v1.0

链接:https://pan.baidu.com/s/1jqCBnlS7alEcRaYPbKfY4A
提取码:fe5t
复制这段内容后打开百度网盘手机App,操作更方便哦

AutoStartup.exe的作用是将Matrix Housemaid for Surface.exe通过读写注册表添加的开机启动项,需要管理员权限,而Matrix Housemaid for Surface.exe不需要。

标签:02,01,acceKey,AcceaccessoriesDictionary,acce,视图,processName,2021,进程
来源: https://blog.csdn.net/Lunatic_Will/article/details/112120217