首页 > 解决方案 > 如何检查是否显示 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 登录屏幕/用户解锁他的会话之前,我不希望我的程序做任何事情

标签: c#.netwindowsauthenticationsession-state

解决方案


尝试

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);
            }
        };

推荐阅读