WinKiosk · 安全桌面
密码错误
🧮 计算器
📝 记事本
🌐 Edge浏览器

应用设置

修改管理员密码

语言设置

屏蔽按键

应用白名单设置

禁用硬件开关

系统限制

开机自启动

电源管理

设备信息

应用版本: 1.0.0
.NET 运行时: .NET 10.0
操作系统版本: Windows 11 (10.0.22621)
系统平台: Win32NT
系统架构: X64
设备名称: KIOSK-PC
当前用户: KioskUser
处理器核心数: 8
屏幕分辨率: 1920×1080
系统目录: C:\Windows\system32
应用内存占用: 42.3 MB

系统操作

关机 / 重启 / 注销 需管理员权限。退出应用将还原所有系统设置后关闭 Kiosk。

📖 WinKioskCCCC — 项目帮助文档

项目概述

WinKioskCCCC(Windows Kiosk Secure Desktop)是一个运行于 Windows 10/11 的 Kiosk 模式应用程序。 它通过低级别键盘钩子注册表策略系统命令实现设备锁定, 仅允许管理员配置的白名单应用运行,适用于公共查询终端、数字标牌、自助服务机等场景。

技术栈

类别技术说明
运行时 / SDK.NET 10.0目标框架 net10.0-windows
UI 框架Windows Forms (WinForms)原生 Windows 桌面 GUI
编程语言C# (v10+)启用 Nullable 引用类型
配置格式JSONSystem.Text.Json 序列化 kiosk_config.json
日志系统自定义文件日志kiosk_YYYYMMDD.log 日期滚动日志
注册表 APIMicrosoft.Win32.Registry读写 HKCU / HKLM
键盘钩子Win32 P/Invoke (user32.dll)WH_KEYBOARD_LL 全局低级别键盘钩子
窗口钩子Win32 P/Invoke (user32.dll)SetWinEventHook 前台窗口监控
进程管理System.Diagnostics.Process启动白名单应用、重启 Explorer
系统命令powercfg / netsh / PowerShell电源管理、网络硬件控制
OS 兼容Windows 10/11 (21H2+), LTSC家庭版部分受限
.NET 10 WinForms C# Win32 P/Invoke Registry API JSON Config File Logging powercfg netsh PowerShell

※ 本项目的所有依赖均为 .NET 内建库和 Windows 系统工具,零外部 NuGet 包依赖

核心功能一览

1. 管理员密码保护

进入设置页需要管理员密码验证。默认密码:0000(可在设置中修改)。 密码通过 PasswordChar 遮蔽输入,存储在 kiosk_config.json 中。 另有超级管理员后门(标题点击 20 次 + 独立密码)用于维护场景。

2. 全屏 Kiosk 桌面

使用 FormBorderStyle = None + WindowState = Maximized 覆盖整个屏幕。 顶部栏显示应用标题与帮助、设置按钮(设置需管理员密码验证)。中间区域展示白名单应用图标,点击通过 ShellExecute 启动。

3. 按键屏蔽(低级别键盘钩子 WH_KEYBOARD_LL)

快捷键效果
Win 键(单独及组合)阻止打开开始菜单 / Win+R / Win+E / Win+D 等
Alt+Tab阻止切换窗口
Alt+F4阻止关闭窗口
Alt+Esc阻止切换窗口
Ctrl+Esc阻止打开开始菜单
Ctrl+Shift+Esc阻止打开任务管理器

通过 WH_KEYBOARD_LL 全局钩子实现,比注册表屏蔽更底层,无法被绕过。每个按键可单独开关。

4. 弹窗/通知屏蔽(WinEvent 钩子)

使用 SetWinEventHook 监听 EVENT_SYSTEM_FOREGROUND 事件。 当非白名单应用窗口获得前台焦点时,自动发送 WM_CLOSE 消息关闭它并重新激活 Kiosk 窗口。 白名单应用启动的进程及其子进程通过 HashSet<int> 跟踪,不会被误关闭。

5. 任务栏 & 任务管理器屏蔽(注册表策略)

设置注册表路径
禁用任务栏HKCU\...\Policies\Explorer\NoTaskbar = 1
禁用系统托盘HKCU\...\Policies\Explorer\NoTrayItemsDisplay = 1
禁用任务管理器HKCU\...\Policies\System\DisableTaskMgr = 1
屏蔽 Toast 通知HKCU\...\PushNotifications\ToastEnabled = 0

设置后重启 explorer.exe 使任务栏隐藏立即生效。程序退出时全部还原。

6. 系统限制(注册表锁定)

设置注册表路径效果
禁用锁屏System\DisableLockWorkstationCtrl+Alt+Del 隐藏"锁定"
禁用切换用户System\HideFastUserSwitching阻止切换账户
隐藏注销Explorer\NoLogOffCtrl+Alt+Del 隐藏"注销"
禁用修改密码System\DisableChangePasswordCtrl+Alt+Del 隐藏"更改密码"
隐藏安全中心图标Defender Security Center\Systray\HideSystray (HKLM)1 隐藏,0 显示
禁用屏保密码Control Panel\Desktop\ScreenSaverIsSecure = 0唤醒无需密码

所有注册表写入操作前备份原始值,退出时逐一还原,确保系统非破坏性修改。

7. 开机自启动

设置实现方式效果
开机自启动计划任务 (schtasks) + ONLOGON 触发器最高权限静默自启,不弹 UAC

通过"最高权限"计划任务实现开机静默自启,登录后自动拉起已提权的 Kiosk 进程,全程无需用户干预。关闭后仅移除登录触发器,任务本身保留以便手动启动时静默提权。

8. 电源管理

设置命令效果
禁止休眠powercfg /h off禁用系统休眠功能
空闲睡眠超时powercfg /change standby-timeout-ac/dc可配置 0-1440 分钟

退出时恢复默认睡眠超时 (AC 30min / DC 15min) 并重新启用休眠。

9. 硬件开关

硬件命令效果
WiFinetsh interface set interface "Wi-Fi" admin=enable/disable禁用/启用 WiFi 网卡
蓝牙PowerShell Get-PnpDevice -Class Bluetooth | Disable-PnpDevice禁用/启用蓝牙设备
移动网络 (4G)netsh mbn set interface * admin=enable/disable禁用/启用 4G 模块

退出时自动恢复所有被禁用的硬件。

10. 应用白名单

白名单应用显示在桌面中央,由管理员在设置中填写应用名称与绝对路径。点击图标通过 Process.Start + ShellExecute = true 启动。 可添加/移除/恢复默认应用。默认包含:计算器、记事本、Edge 浏览器。

11. 中英双语国际化

完整支持中文 (zh-CN) 和英文 (en-US) 双语切换。60+ 个翻译字符串覆盖所有 UI 标签、消息、按钮文本。 通过 LangHelper.cs 字典实现,语言切换后需重启生效。

12. 配置持久化

所有设置通过 AppConfig.cs 序列化为 kiosk_config.json(位于 exe 同级目录)。 启动时自动加载,每次修改设置自动保存。

13. 日志系统

日期滚动日志文件 kiosk_YYYYMMDD.log。六种日志级别:INIT INFO WARN ERROR APPLY RESTORE。 线程安全,记录启动、配置加载、注册表操作、电源管理、退出与还原全过程。

14. 完整生命周期管理

启动流程:
  1. AppLogger.Init()          — 初始化日志系统
  2. AppConfig.Load()          — 读取 kiosk_config.json
  3. SystemLockdown.ApplyAll() — 应用所有注册表策略 & 电源管理 & 开机自启
  4. RefreshHooks()            — 安装键盘钩子 + WinEvent 钩子
  5. ApplyDefaultSettings()    — 屏蔽任务栏 / 任务管理器 / 通知
  6. RefreshAppLauncher()      — 渲染白名单应用图标

退出流程:
  1. UnhookWindowsHookEx()     — 卸载键盘钩子
  2. UnhookWinEvent()          — 卸载窗口钩子
  3. RestoreSystemSettings()   — 还原任务栏 / 任务管理器 / 通知
  4. SystemLockdown.RestoreAll() — 遍历备份逐项还原所有注册表 & 电源设置
  5. AppConfig.Save()          — 持久化当前配置到磁盘

项目文件结构

WinKioskCCCC/
├── Program.cs                  # 应用入口 — Application.Run(new KioskForm())
├── KioskForm.cs                # 主界面 — 全屏桌面 + 应用启动器 + 键盘钩子
├── SettingsForm.cs             # 设置页面逻辑
├── SettingsForm.Designer.cs    # 设置页面布局 (TableLayoutPanel)
├── AppInfo.cs                  # 应用信息数据模型 (Name/NameEn/Path/Icon)
├── AppConfig.cs                # JSON 配置持久化 (Load/Save)
├── AppLogger.cs                # 磁盘日志记录 (日期滚动, 线程安全)
├── SystemLockdown.cs           # 注册表锁定 + 电源管理 + 注册表备份恢复
├── LangHelper.cs               # 中英双语字典 + 语言切换
├── PasswordDialog.cs           # 独立密码验证对话框
└── WinKioskCCCC.csproj         # SDK 风格项目文件 (net10.0-windows)

注册表备份恢复机制

SystemLockdown 在每次设置注册表之前保存原始值:

RegistryBackup 结构:
  Hive:          CurrentUser / LocalMachine
  KeyPath:       注册表路径
  ValueName:     值名称
  OriginalValue: 原始数据
  Kind:          值类型 (DWord / String)
  Existed:       修改前是否存在

恢复逻辑:
  - 若原值存在 → 还原为原值
  - 若原值不存在 → 删除该值

构建要求

  • .NET 10 SDK(或更高版本)
  • 无需 Visual Studio — dotnet build 即可编译
  • 无需 .sln 文件 — SDK 风格 .csproj 自包含
  • 某些 HKLM 注册表项和 powercfg 需要管理员权限运行

兼容性

操作系统支持备注
Windows 10 21H2+✅ 完全支持全部功能正常
Windows 11 21H2+✅ 完全支持全部功能正常
Windows 10/11 LTSC✅ 支持Shell Launcher 模式可用
Windows 家庭版⚠️ 部分支持部分 GPO 无效(注册表仍生效)