我有一台应用程序在Windows XP计算机上每小时运行一次。 要正常运行,该应用程序需要解锁当前会话。 所以我想知道是否有办法知道当前的Windows会话是否被locking或不与C#和.NET 3.5。
更新:应用程序不能侦听SessionNotification事件。 应用程序可以随时启动,完成后终止。
谢谢!
这些没有经过我的测试,但看起来很有趣。 我会给他们一个测试,但是我的Visual Studio目前似乎还不太满意。
我曾经使用GetForegroundWindow()
函数来确定屏幕保护程序是否正在运行。 如果返回值为NULL
,那么屏幕保护程序(或者大概锁定的工作站)是活动的。 请注意,这是在Windows NT的早期阶段,没有记录这样做,并不能保证今天仍然会做同样的事情。
查看Win32 API参考,您可以使用类似OpenInputDesktop()
来获取当前活动桌面的HDESK
。 如果您无法获得桌面的句柄,或者它与线程桌面不同,那么您的应用程序将运行在不活动的桌面(而工作站可能处于屏幕保护状态或被锁定)。 没有保证这种方法可行,但可能值得调查。
我在这里回答了类似的问题。 我认为可以增强方法2和3来检测锁定状态。