2012-09-17 71 views
3

我計劃開發一個應用程序,該應用程序以Windows啓動(可能是服務),並默默記錄用戶的登錄,註銷和系統鎖定/解鎖事件。C#中記錄登錄,註銷,系統鎖定/解鎖事件#

這將是真棒,如果有人可以給我一個提示,記錄它們的總空閒時間(其中已被用戶沒有進行系統活動的時間)

我找了一個預先開發的圖書館或東西,它可以幫助我順利地完成了這個項目。

回答

5

嘗試一下下面的代碼....

private enum WTS 
{ 
     CONSOLE_CONNECT = 1, 
     CONSOLE_DISCONNECT = 2, 
     REMOTE_CONNECT = 3, 
     REMOTE_DISCONNECT = 4, 
     SESSION_LOGON = 5, 
     SESSION_LOGOFF = 6, 
     SESSION_LOCK = 7, 
     SESSION_UNLOCK = 8, 
     SESSION_REMOTE_CONTROL = 9 
} 

protected override void WndProc(ref System.Windows.Forms.Message m) 
{ 
    switch (m.Msg) { 
     case WM_WTSSESSION_CHANGE: 
      switch (m.WParam.ToInt32) { 
       case WTS.CONSOLE_CONNECT: 
        //MessageBox.Show("A session was connected to the console session."); 

        break; 
       case WTS.CONSOLE_DISCONNECT: 
        //MessageBox.Show("A session was disconnected from the console session."); 

        break; 
       case WTS.REMOTE_CONNECT: 
        break; 
       //MessageBox.Show("A session was connected to the remote session."); 
       case WTS.REMOTE_DISCONNECT: 
        break; 
       //MessageBox.Show("A session was disconnected from the remote session."); 
       case WTS.SESSION_LOGON: 

        break; 
       //MessageBox.Show("A user has logged on to the session.") 
       case WTS.SESSION_LOGOFF: 
        //MessageBox.Show("A user has logged off the session."); 

        break; 
       case WTS.SESSION_LOCK: 
        //MessageBox.Show("A session has been locked.") 

        break; 
       case WTS.SESSION_UNLOCK: 
        //MessageBox.Show("A session has been unlocked.") 

        break; 
       case WTS.SESSION_REMOTE_CONTROL: 
        MessageBox.Show("A session has changed its remote controlled status. To determine the status, call GetSystemMetrics and check the SM_REMOTECONTROL metric."); 
        break; 
      } 

      break; 
    } 

    base.WndProc(m); 
} 
+0

正是把這個代碼? –

+0

在Win窗體代碼頁(.cs)文件後面..... –

+0

Nitin ..即時通訊抱歉再次打擾你..但我得到以下錯誤「得到或設置訪問器預期」在枚舉WTS –

0
Private Declare Function WTSRegisterSessionNotification Lib "Wtsapi32" (ByVal hWnd As IntPtr, ByVal THISSESS As Integer) As Integer 
    Private Declare Function WTSUnRegisterSessionNotification Lib "Wtsapi32" (ByVal hWnd As IntPtr) As Integer 

    Private Const NOTIFY_FOR_ALL_SESSIONS As Integer = 1 
    Private Const NOTIFY_FOR_THIS_SESSION As Integer = 0 
    Private Const WM_WTSSESSION_CHANGE As Integer = &H2B1 



    Private Enum WTS 
     CONSOLE_CONNECT = 1 
     CONSOLE_DISCONNECT = 2 
     REMOTE_CONNECT = 3 
     REMOTE_DISCONNECT = 4 
     SESSION_LOGON = 5 
     SESSION_LOGOFF = 6 
     SESSION_LOCK = 7 
     SESSION_UNLOCK = 8 
     SESSION_REMOTE_CONTROL = 9 
    End Enum 
    Shared FileName As String 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
     Me.Hide() 
     WTSRegisterSessionNotification(Me.Handle, NOTIFY_FOR_ALL_SESSIONS) 
     Timer1.Start() 
     Me.Hide() 
     FileName = Application.StartupPath + "/Data/TimeSheet_" + DateTime.Today.ToString("dd-MMM-yyyy") + ".txt" 
     System.IO.File.Create(FileName) 
    End Sub 

    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) 
     Select Case m.Msg 
      Case WM_WTSSESSION_CHANGE 
       Select Case m.WParam.ToInt32 
        Case WTS.CONSOLE_CONNECT 
         'MessageBox.Show("A session was connected to the console session.") 
         Timer1.Start() 
         System.IO.File.AppendAllText(FileName, "IN - " + lblTime.Text) 
        Case WTS.CONSOLE_DISCONNECT 
         'MessageBox.Show("A session was disconnected from the console session.") 
         System.IO.File.AppendAllText(FileName, "OUT - " + lblTime.Text + vbCrLf) 
         Timer1.Stop() 
        Case WTS.REMOTE_CONNECT 
         'MessageBox.Show("A session was connected to the remote session.") 
        Case WTS.REMOTE_DISCONNECT 
         'MessageBox.Show("A session was disconnected from the remote session.") 
        Case WTS.SESSION_LOGON 
         Timer1.Start() 
         System.IO.File.AppendAllText(FileName, "IN - " + lblTime.Text) 
         'MessageBox.Show("A user has logged on to the session.") 
        Case WTS.SESSION_LOGOFF 
         'MessageBox.Show("A user has logged off the session.") 
         System.IO.File.AppendAllText(FileName, "OUT - " + lblTime.Text + vbCrLf) 
         Timer1.Stop() 
        Case WTS.SESSION_LOCK 
         'MessageBox.Show("A session has been locked.") 
         System.IO.File.AppendAllText(FileName, "OUT - " + lblTime.Text + vbCrLf) 
         Timer1.Stop() 
        Case WTS.SESSION_UNLOCK 
         'MessageBox.Show("A session has been unlocked.") 
         Timer1.Start() 
         System.IO.File.AppendAllText(FileName, "IN - " + lblTime.Text) 
         If m_clsBalloonEvents Is Nothing Then 
          'allow our ballon class to create the event class for us, hooking into the notify icon that will 
          'be associated with the balloons... 
          m_clsBalloonEvents = Balloon.HookBalloonEvents(niMain) 
          'add handlers for the events that we are concerned with in this application... 
          AddHandler m_clsBalloonEvents.BallonClicked, AddressOf BalloonClicked 
          AddHandler m_clsBalloonEvents.BallonHidden, AddressOf BalloonHidden 
         End If 
         Balloon.DisplayBalloon(niMain, "Today's Time", lblTime.Text, CType(IIf(False, Balloon.BalloonMessageTypes.Error, Balloon.BalloonMessageTypes.Info), Balloon.BalloonMessageTypes)) 
        Case WTS.SESSION_REMOTE_CONTROL 
         MessageBox.Show("A session has changed its remote controlled status. To determine the status, call GetSystemMetrics and check the SM_REMOTECONTROL metric.") 
       End Select 

     End Select 

     MyBase.WndProc(m) 
    End Sub