代码如下:
public partial class MainWindow
{
public MainWindow()
{
InitializeComponent();
}
protected override void OnSourceInitialized(EventArgs e)
{
base.OnSourceInitialized(e);
HwndSource source = PresentationSource.FromVisual(this) as HwndSource;
source.AddHook(WndProc);
}
private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
switch (msg)
{
//锁屏事件 或许可以通过switch desktop来获取ctrl+alt+delete等状态
case 0x2B1: //
if (wParam != null)
{
switch (wParam.ToInt32())
{
case 0x7 : // 锁屏
//RegistryStorage.ScreenLock = true;
break;
case 0x8: // 解锁
//callMethod();
break;
}
}
break;
}
return Intptr.zero;
}
}
此方式有一个缺陷:只能在系统状态发生改变时,才能获取到系统当前状态
解决方案如下:
https://blog.youkuaiyun.com/weixin_45526252/article/details/123182910