当前位置:  开发笔记 > 编程语言 > 正文

服务需要检测工作站是否已锁定,并且屏幕保护程序处于活动状态

如何解决《服务需要检测工作站是否已锁定,并且屏幕保护程序处于活动状态》经验,为你挑选了1个好方法。

我正在开发一项服务,需要检测登录到单台机器的所有用户的用户状态.具体来说,我想检查屏幕保护程序是否处于活动状态以及会话是否已锁定.

此代码将在系统级服务下运行,并且没有可见的UI,因此可以排除多个选项(捕获WM消息等).

除了正常的工作站之外,我还希望能够在有多个用户登录的终端服务器上工作.由于这些要求,我想知道是否需要涉及多个Win32 API.

关于从哪里开始的任何想法?



1> Michael Pien..:

作为服务,您可以使用事件OnSessionChange来捕获所有相关时刻.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceProcess;
using System.Diagnostics;

namespace MyCode
{
    class MyService : ServiceBase
    {
        public MyService()
        {
            this.CanHandleSessionChangeEvent = true;
        }

        protected override void OnSessionChange(SessionChangeDescription changeDescription)
        {
            switch (changeDescription.Reason)
            {
                case SessionChangeReason.SessionLogon:
                    Debug.WriteLine(changeDescription.SessionId + " logon");
                    break;
                case SessionChangeReason.SessionLogoff:
                    Debug.WriteLine(changeDescription.SessionId + " logoff");
                    break;
                case SessionChangeReason.SessionLock:
                    Debug.WriteLine(changeDescription.SessionId + " lock");
                    break;
                case SessionChangeReason.SessionUnlock:
                    Debug.WriteLine(changeDescription.SessionId + " unlock");
                    break;
            }

            base.OnSessionChange(changeDescription);
        }
    }
}

我确信可以根据changeDescription.SessionId识别用户.但此刻我不知道如何......

编辑:这应该是可能的

    public static WindowsIdentity GetUserName(int sessionId)
    {
        foreach (Process p in Process.GetProcesses())
        {
            if(p.SessionId == sessionId) {                    
                return new WindowsIdentity(p.Handle);                          
            }                
        }
        return null;
    }

MSDN链接

system.serviceprocess.servicebase.onsessionchange

system.serviceprocess.sessionchangedescription

system.serviceprocess.sessionchangereason

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有