c# - 如何检查是否显示 Windows 登录屏幕(在 .NET 中)
问题描述
有什么方法可以识别是否显示登录屏幕?
我确实使用 OpenInputDesktop 功能,但它不可靠(有时它有效,但有时不)
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr OpenInputDesktop(uint dwFlags, bool fInherit, uint dwDesiredAccess);
var handle = OpenInputDesktop(0, false, 0);
var locked = handle == null || handle == 0;
我的确切情况是:Windows 10 在操作系统重新启动后使用用户会话启动所有以前运行的程序。在显示 Windows 登录屏幕/用户解锁他的会话之前,我不希望我的程序做任何事情
解决方案
尝试
using Microsoft.Win32;
SystemEvents.SessionSwitch += (s, e) =>
{
if (e.Reason == SessionSwitchReason.SessionLock)
{
// Do what you want here as the system is locked
}
else
{
Console.WriteLine("Unlocked by: {0}", Environment.UserName);
}
};
推荐阅读
- apache-spark - 在 Dataproc 中向 Spark 作业提交作业参数
- prometheus-alertmanager - 如何在警报管理器路由匹配中写入非条件?
- nearprotocol - NEAR 协议网络的发布周期是多少?
- postgresql - Postgres RDS pg_recvlogical 复制角色
- r - 如何制作支持带引号和不带引号的参数的 tidyverse 函数?
- json - 如何使用空键并使用默认值快速读取 json?
- javascript - 带有嵌套函数和循环的 ES6 闭包的奇怪输出,为什么输出与 Var 不同而与 Let 不同?
- c# - 在 Html.BeginForm 中使用局部视图将空模型发送到控制器操作方法
- html - 网页材料设计 - 如何进行自动完成输入
- sql - Oracle SQL - 模型子句中的可变列数