打赏

起因

购了个ThinkPad T450S,没发现其组合键有关闭显示器选项。而关闭显示器,在彻夜下载连续剧及大资料时,非常有用,于是就寻找方法。

终于找到了个工具,Close LCD,27K大小,一点就关,易用之极。

之前装ThinkPad电源管理器v4.0,其一有选项是在桌面右键菜单中加入[关闭显示器]选项,甚为怀念。现装v6版,没有其选项,好吧,想办法!

于是在51nb上找到一方案,其用批处理加入注册表菜单项,可以解决问题。但问题来了,操作不直观,没有图标及位置。

研究v4.0方案,提取更多信息,以c#写一小工具,实现简易安装与去除。记录过程,并分享制作的小工具,文章底部附有下载连接

只是,它不仅加入桌面右键菜单,在所有文件夹右键菜单中,都存在。

 

实现

c#操作注册表而已,无奇,实现代码如下:

namespace CloseLCD
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();

            UpdateUIState();
        }

        private void UpdateUIState()
        {
            btnSet.Text = MenuItemExists() ? "从右键菜单移除" : "加入右键菜单";
            txtMenuText.Enabled = !MenuItemExists();
        }

        private bool MenuItemExists()
        {
            var path = Registry.GetValue(@"HKEY_CLASSES_ROOT\Directory\Background\shell\TurnoffMonitor\command", "", "");
            if (path == null)
                return false;
            return File.Exists(path.ToString().Replace("\"", ""));
        }

        private void InstallMenuItem()
        {
            try
            {
                var key = Registry.ClassesRoot.CreateSubKey(@"Directory\Background\shell\TurnoffMonitor");
                if (key != null)
                {
                    string text = !string.IsNullOrEmpty(txtMenuText.Text) ? txtMenuText.Text : "关闭显示器(&M)";
                    key.SetValue("", text, RegistryValueKind.String);
                    string clPath = Path.Combine(Application.StartupPath, "CloseLCD.exe");
                    clPath = string.Format("\"{0}\"", clPath);
                    key.SetValue("Icon", clPath, RegistryValueKind.String);
                    key.SetValue("Position", "Bottom", RegistryValueKind.String);
                    key = key.CreateSubKey("command");
                    key.SetValue("", clPath, RegistryValueKind.String);
                    key.Close();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(this, "加入菜单项失败,请确认是否有杀毒软件等工具防护注册表。\r\n信息为:" + ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void btnSet_Click(object sender, System.EventArgs e)
        {
            //加入
            if (!MenuItemExists())
                InstallMenuItem();
            //移除
            else
            {
                try
                {
                    using (var key = Registry.ClassesRoot.OpenSubKey(@"Directory\Background\shell\TurnoffMonitor", true))
                    {
                        if (key != null)
                            key.DeleteSubKeyTree("");
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(this, "移除菜单项失败,请确认是否有杀毒软件等工具防护注册表。\r\n信息为:" + ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
            }

            UpdateUIState();
        }
    }
}

 

效果

在笔记本及单位LCD显示器上验证,工作正常。

其界面及显示效果如下图:


 

集成

找到了关闭显示器的api函数,干脆置关闭与菜单设置于一体算了,省事。

 

 

参考资料:

为你的桌面右键添加一个“关闭显示器”的菜单!

文件打包下载

单文件版下载

posted on 2018-09-19 11:21  楚人无衣  阅读(4436)  评论(0编辑  收藏  举报