我们有一个每晚更新用户电脑上的应用程序的流程,这需要关闭应用程序并再次备份(不打算更改该流程)。

问题是我们在启动时构建一个 Windows AppBar,它需要一个有效的屏幕,而当系统锁定时,Screen 类中就没有一个。所以没有启用任何视觉效果,而且看起来非常丑陋。

目前解决此问题的唯一方法是检测锁定的屏幕,然后旋转并等待用户解锁桌面,然后继续启动。不保留它不是一个选择,因为这是我们用户工作流程的关键部分,如果他们在前一天晚上保留它,他们希望它能够启动并运行。

有任何想法吗??我似乎无法在任何地方找到显示信息,但它必须存储在某个地方,因为用户仍然处于登录状态。

Screen.AllScreens 数组的内容:

** 锁定时:

Device Name    : DISPLAY
Primary        : True
Bits Per Pixel : 0
Bounds         : {X=-1280,Y=0,Width=2560,Height=1024}
Working Area   : {X=0,Y=0,Width=1280,Height=1024}

** 解锁后:

Device Name    : \\.\DISPLAY1
Primary        : True
Bits Per Pixel : 32
Bounds         : {X=0,Y=0,Width=1280,Height=1024}
Working Area   : {X=0,Y=0,Width=1280,Height=994}

Device Name    : \\.\DISPLAY2
Primary        : False
Bits Per Pixel : 32
Bounds         : {X=-1280,Y=0,Width=1280,Height=1024}
Working Area   : {X=-1280,Y=0,Width=1280,Height=964}
有帮助吗?

解决方案

有对此没有清晰的解决方案,Windows不提供一种方法来检测该工作站被锁定,“错误”的桌面处于活动状态。只能检测会话开关,示例代码是此处。为了使这项工作,你几乎被迫包括在应用程序代码并把它留下痕迹,它可以读回当它开始备份。一定要重置你用过一次后,这样的应用程序不能得到永远停留。

其他提示

这个屏幕锁定问题取决于您使用的版本,无论是使用 GINA 锁定屏幕的 XP 还是使用 ContentProvider 的 Vista,这两种机制最终都会对此负责。

查看屏幕是否锁定的唯一方法是启动屏幕保护程序(这可以通过运行 pinvoke 来查询来轻松查询 系统参数信息, ,了解屏幕保护程序是否处于活动状态 - SPI_GETSCREENSAVERRUNNINGSPI_GETSCREENSAVESECURE 以确定是否会触发 GINA 或 Content Provider),当按 WinKey + L 启动屏幕保护程序时,在指定的时间段后,如果没有任何活动,则 GINA 或 ContentProvider 启动并用锁定屏幕替换屏幕保护程序。 ..我在此处添加了两个有关 Windows 下安全日志记录信息的相关链接...

这需要一点点工作,但你可以利用EnumDisplayDevices,EnumDisplaySettingsEx,MonitorFromPoint,GetMonitorInfo全部来自USER32和抢设备的屏幕截图。

如果PC被锁定,或者如果有活性的屏幕保护程序,则屏幕捕获始终是一个米色。你可以检查该条件知道系统被锁定。这适用于系统被RDPed成也(瘦客户机到XP的VDI例如)

目前,在我的环境中工作最少。码样本可通过谷歌搜索中找到。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top