太长不看版

WindowLockScreen: https://github.com/sanshiliuxiao/WindowLockScreen

自身需求

由于自己的电脑驱动存在一些问题,导致合盖之后,电脑进入休眠状态,开盖之后,屏幕无法正常被点亮,需要强制关机重启,觉得这样挺烦的。就直接将所有情况设置成无动作,保证电脑一直开机,于是乎,就想到之前写过的一个小工具,就顺手重构了一下。

实现原理

WPF 的窗口里面有一个属性叫做 Topmost,当他设置为 True 时,这个窗口会置于最顶层,那么我将一个透明的、置顶的窗口叠在最上面,那不就实现了我的需求了么。

另外可以用钩子函数去拦截大部分的热键,从而达到锁键盘的作用。不过目前没有拦截正常的输入按键和 Ctrl + Alt + Delete 热键。

前者是不想拦截,觉得没必要,后者是因为这个热键优先级更高,采用钩子函数无法拦截到,就先放弃了。

稍做说明

小工具采用了 Prism.UnityPLnvoke.User32Hardcodet.NotifyIcon.Wpf.NetCore 第三方包。 分别实现了 Ioc 容器、隐藏任务窗口(Alt + Tab)、应用托盘功能。

说是小工具,其实还蛮大的,又不是不能用。或许某位大佬能够帮忙优化,不借助第三方包,全部手动实现。有兴趣可以直接下载源代码查看,虽然没写啥备注,但应该还是比较好懂的吧。

第一次应用启动后,会自动锁屏,右下角出现应用托盘。

主要逻辑:

  1. 创建 PrismApplication 实例
    1. 创建 Ioc 容器
    2. 创建 MainWindow 窗口实例
  2. MainWindow 窗口实例
    1. 创建应用托盘
    2. 创建 ScreenLockWindow 实例,并展示
      1. 创建 VerifyPasswordWindow 实例
    3. 开启键盘钩子
  3. 点击 ScreenLockWindow 右上角
    1. 传入 ScreenLockWindow 实例 给 VerifyPasswordWindow 实例
    2. 展示 VerifyPasswordWindow 实例
  4. 输入密码
    1. 校验密码
    2. 关闭 VerifyPasswordWindow
    3. 关闭 ScreenLockWindow
    4. 关闭键盘钩子
  5. 应用托盘
    1. 重新锁屏或退出。