0

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

问题是我们在启动时构建了一个 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}
4

3 回答 3

1

对此没有干净的解决方案,Windows 没有提供一种方法来检测工作站是否已锁定以及“错误”的桌面是否处于活动状态。您只能检测会话切换,示例代码在这里。为了完成这项工作,您几乎不得不在应用程序中包含此代码,并让它留下一个面包屑,以便在它重新启动时可以读回。请务必在使用一次后重置它,以免应用程序永久卡住。

于 2010-03-15T15:11:46.677 回答
0

这需要一些工作,但是您可以使用来自 user32 的 EnumDisplayDevices、EnumDisplaySettingsEx、MonitorFromPoint、GetMonitorInfo 并获取设备的屏幕截图。

如果 PC 已锁定,或者有活动的屏幕保护程序,则屏幕截图始终为米色。您可以检查该情况以了解系统已锁定。这也适用于被 RDP 接入的系统(例如 XP VDI 的瘦客户端。)

至少这在我的环境中有效。代码示例可以通过谷歌搜索找到。

于 2010-08-06T17:43:44.497 回答
0

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

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

于 2010-03-15T15:08:11.280 回答