有没有一种方式,能让我们一键甚至一快捷键就实现屏幕关闭?本文推荐一个轻量、专注、开箱即用的屏幕控制工具,完全基于 C# 和 .NET 9.0 开发,专为 Windows 用户设计。
项目介绍项目是一个开源的 Windows 桌面工具,核心目标是提供简单、可靠的屏幕关闭与管理能力。它不依赖第三方驱动,也不修改系统设置,而是巧妙利用 Windows 自带的屏幕保护程序(scrnsave.scr)和系统 API,在不干扰用户正常使用的前提下,实现"秒级关屏"。
整个项目结构清晰,代码规范,适合开发学习、二次开发,也适合普通用户直接下载使用。
项目功能1、一键关闭屏幕:点击主界面按钮或使用全局快捷键(默认 Alt+1),即可立即或延时关闭显示器。
2、全局热键支持:即使窗口不在前台,也能通过自定义快捷键触发关屏操作。
3、最小化到系统托盘:程序可常驻后台,双击托盘图标或点击任务栏即可快速唤出。
4、运行状态监控:实时显示程序运行时间,并记录关键操作日志,便于追踪使用情况。
5、配置持久化:支持保存和加载用户设置,包括快捷键开关、延迟时间等。
6、自动更新检查:启动时自动检测新版本,确保用户始终使用最新功能与修复。
项目特点最大特点是"轻"与"稳"。它没有花哨的动画或冗余功能,专注于解决一个具体问题。界面简洁直观,资源占用极低,后台运行几乎无感。
同时,它充分尊重习惯——支持从数字键或小键盘触发快捷键,兼容多种输入方式;日志文件自动归档,避免磁盘爆满;托盘交互符合 Windows 原生体验。
另外,所有资源(图标、背景图)均嵌入程序集,无需额外文件,真正做到"单文件运行"。
项目技术项目采用 C# 语言开发,基于 .NET 9.0 运行时,充分利用了其性能优化与跨平台潜力(尽管当前仅面向 Windows)。
UI 层使用 Windows Forms 构建,兼顾开发效率与系统兼容性。关键技术点包括:
通过 P/Invoke 调用 user32.dll 的 RegisterHotKey 实现全局快捷键;
利用 SystemParametersInfo 和 scrnsave.scr 触发屏幕关闭;
使用 NotifyIcon 实现系统托盘集成;
通过 JSON 序列化持久化用户配置;
嵌入式资源管理,确保程序独立分发;
异步任务处理更新检查,避免 UI 阻塞。
项目代码检查更新菜单项点击事件处理
private async void CheckUpdateMenuItem_Click(object sender, EventArgs e){try{UpdateStatus("正在检查更新...");LogOperation("开始检查更新");// 创建更新检查器实例UpdateChecker updateChecker = new UpdateChecker;// 在后台线程中检查更新,避免阻塞UIUpdateChecker.UpdateInfo updateInfo = await Task.Run( => updateChecker.CheckForUpdatesAsync(Version));if (string.IsNullOrEmpty(updateInfo.LatestVersion)){UpdateStatus("无法获取最新版本信息");LogOperation("检查更新:无法获取最新版本信息");MessageBox.Show("无法获取最新版本信息,请稍后再试。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);}elseif (updateInfo.HasUpdate){UpdateStatus($"发现新版本: {updateInfo.LatestVersion}");LogOperation($"检查更新:发现新版本 {updateInfo.LatestVersion}");// 使用统一的更新对话框UpdateDownloader.ShowUpdateDialog(updateInfo, Version, UpdateStatus, LogOperation, this);}else{UpdateStatus("您使用的是最新版本");LogOperation("检查更新:当前已是最新版本");MessageBox.Show($"您当前使用的版本 {Version} 已是最新版本!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);}}catch (Exception ex){UpdateStatus("检查更新失败:" + ex.Message);LogOperation("检查更新失败:" + ex.Message);MessageBox.Show("检查更新失败:" + ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);}}项目效果按下快捷键后,屏幕几乎瞬间变黑(取决于是否启用延迟),系统仍保持运行,移动鼠标或按任意键即可唤醒。程序启动迅速,内存占用通常低于 30MB。
托盘提示清晰,日志记录详实,帮助用户了解每次操作的时间与结果。对于需要频繁切换屏幕状态的用户(如演示、调试、节能场景),它显著提升了效率。
工具主页


检查更新

屏幕控制设置
项目源码源码结构清晰,包含 MainForm.cs(主逻辑)、Program.cs(入口)、SettingsForm(配置界面)等,资源文件统一放在 res 目录并通过嵌入式资源引用。只需安装 Visual Studio 和 .NET 9.0 SDK 即可编译运行。普通用户则可直接下载发布版 ScreenControl.exe,无需安装,双击即用。
GitHub:https://github.com/YYLMZXC/screen-control
总结项目是一个"小而美"的实用程序。它用最直接的方式解决了用户的一个高频痛点,体现了"少即是多"的设计哲学。无论是作为日常工具使用,还是作为.NET 桌面开发的学习案例,它都值得一试。
未来,可以增加多显示器独立控制、定时关屏等进阶功能,但核心理念不变:简单、可靠、不打扰。
关键词C#、.NET 9.0、、Windows Forms、、、、scrnsave、、
最后
如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。也可以加入微信公众号[DotNet技术匠]社区,与其他热爱技术的同行一起交流心得,共同成长!
作者:小码编匠
出处:gitee.com/smallcore/DotNetCore
声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!
END
觉得有收获?不妨分享让更多人受益
关注「DotNet技术匠」,共同提升技术实力

收藏


分享

在看