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

时间:2009-06-19 04:20:11

标签: c# .net windows winapi

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

更新:应用程序无法侦听SessionNotification事件。该应用程序可以随时启动,并在完成后终止。

谢谢!

3 个答案:

答案 0 :(得分:1)

这些都没有经过我的测试,但看起来很有趣。我给他们一个测试,但我的Visual Studio似乎对我不满意。

答案 1 :(得分:0)

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

查看Win32 API参考,您可以使用OpenInputDesktop()之类的内容来获取当前活动桌面的HDESK。如果您无法获得桌面的句柄或者它与您的线程桌面不同,那么您的应用程序正在未激活的桌面中运行(并且工作站可能处于屏幕保护状态或已锁定)。不能保证这种方法可行,但可能值得研究。

答案 2 :(得分:0)

我回答了类似的问题here。我认为方法2&可以增强3以检测锁定状态。