起因
购了个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函数,干脆置关闭与菜单设置于一体算了,省事。
参考资料: