如何确定当前的Windows会话是否被locking?

我有一台应用程序在Windows XP计算机上每小时运行一次。 要正常运行,该应用程序需要解锁当前会话。 所以我想知道是否有办法知道当前的Windows会话是否被locking或不与C#和.NET 3.5。

更新:应用程序不能侦听SessionNotification事件。 应用程序可以随时启动,完成后终止。

谢谢!

这些没有经过我的测试,但看起来很有趣。 我会给他们一个测试,但是我的Visual Studio目前似乎还不太满意。

  • 有什么方法可以让程序知道电脑是否被锁定? (谷歌缓存链接,谢谢@hometoast) (链接永久死亡)
  • 大量的信息在这个线程中
  • 如果您的应用程序可以一直运行并每小时“醒来”一次, SystemEvents.SessionSwitch事件可能会帮助您,上面的线程中有一个示例

我曾经使用GetForegroundWindow()函数来确定屏幕保护程序是否正在运行。 如果返回值为NULL ,那么屏幕保护程序(或者大概锁定的工作站)是活动的。 请注意,这是在Windows NT的早期阶段,没有记录这样做,并不能保证今天仍然会做同样的事情。

查看Win32 API参考,您可以使用类似OpenInputDesktop()来获取当前活动桌面的HDESK 。 如果您无法获得桌面的句柄,或者它与线程桌面不同,那么您的应用程序将运行在不活动的桌面(而工作站可能处于屏幕保护状态或被锁定)。 没有保证这种方法可行,但可能值得调查。

我在这里回答了类似的问题。 我认为可以增强方法2和3来检测锁定状态。