none
如何判斷目前是windows登入畫面 RRS feed

  • 問題

  • 在隔壁板也有發過一樣的主題

    只是不知道如何轉文章所以在這又再發了一次

    有一個關於畫面判斷的問題, 請問版友

    我使用的 .net framework 是 3.5 版本

    寫在windows service內, 依據目前畫面的不同而有不同的判斷基準

    想請問有沒有方法可以判斷電腦目前的畫面是使用者登入畫面還是桌面狀態

    有在官方手冊上找到 User.IsAuthenticated 的屬性

    但不確定是不是我所需要的, 畢竟他上面的說明文件只有「判斷目前的使用者是否已通過驗證」

    (後續測試該屬性在登出的時候無法取得false的結果)

    那如果是登入後又再登出會是怎樣?

    謝謝
    2020年7月16日 上午 07:03

解答

    • 已標示為解答 Big_Sky 2020年7月22日 上午 08:49
    2020年7月16日 下午 12:26
  • 感謝 tihs 幫忙

    我最後實作的結果程式碼如下

    public Service1()
            {
                InitializeComponent();
                CanHandleSessionChangeEvent = true; 
    // 服務可以處理 Terminal Server 工作階段的變更事件則為 true,否則為 false。
    }
    
    public static bool LoginState { get; set; }
    
    protected override void OnSessionChange(SessionChangeDescription changeDescription)
            {
                switch (changeDescription.Reason)
                {
                    case SessionChangeReason.SessionLogon:
                        LoginState = true;
                        break;
                    case SessionChangeReason.SessionLogoff:
                        LoginState = false;
                        break;
                    default:                    
                        break;
                }
            }
    
    

    這樣就可以拿參數 LoginState 去判斷目前 windows 是否是登入畫面跟桌面狀態了

    • 已標示為解答 Big_Sky 2020年7月22日 上午 08:54
    2020年7月22日 上午 08:54

所有回覆

    • 已標示為解答 Big_Sky 2020年7月22日 上午 08:49
    2020年7月16日 下午 12:26
  • 不好意思, 這麼久才回復

    這個網址的連結內容

    我的理解是他是透過 ServiceBase 的 OnSessionChange 方法來偵測Terminal Server 工作階段接收到變更事件時執行

    但需要先將 CanHandleSessionChangeEvent 設為 true 

    這樣子的理解有錯嗎?

    2020年7月22日 上午 08:17
  • 感謝 tihs 幫忙

    我最後實作的結果程式碼如下

    public Service1()
            {
                InitializeComponent();
                CanHandleSessionChangeEvent = true; 
    // 服務可以處理 Terminal Server 工作階段的變更事件則為 true,否則為 false。
    }
    
    public static bool LoginState { get; set; }
    
    protected override void OnSessionChange(SessionChangeDescription changeDescription)
            {
                switch (changeDescription.Reason)
                {
                    case SessionChangeReason.SessionLogon:
                        LoginState = true;
                        break;
                    case SessionChangeReason.SessionLogoff:
                        LoginState = false;
                        break;
                    default:                    
                        break;
                }
            }
    
    

    這樣就可以拿參數 LoginState 去判斷目前 windows 是否是登入畫面跟桌面狀態了

    • 已標示為解答 Big_Sky 2020年7月22日 上午 08:54
    2020年7月22日 上午 08:54