2011-04-10 81 views
2

我想通過一個windows服務捕獲鎖/解鎖/開始/關機/註銷並登錄事件,然後我想爲每個事件啓動一個函數,以便捕獲時間當事件發生時。用java windows服務捕獲windows事件

我想通過Windows服務來做到這一點,所以我不需要手動運行程序。我想通過java語言來運行這個程序。

回答

0

看起來您需要使用JNA並使用本地Windows調用編寫捕獲代碼。

有一個類java.awt.Robot可以反向模擬OS事件,但我不知道如何捕獲純Java中的事件。

0

在C#中,它非常簡單。我可以用C#向你展示代碼,如果你想使用Java作爲語言,你可以將它轉換爲Ja.Net。 (如果你真的想使用JVM,儘管這不會有太大幫助)。

  1. 創建空的C#服務。
  2. 內部程序的主要方法設置CanHandleSessionChangeEvent屬性爲true:

    /// <summary> 
    /// The main entry point for the application. 
    /// </summary> 
    static void Main() 
    { 
        ServiceBase[] ServicesToRun; 
        LogService logService = new LogService(); 
        logService.CanHandleSessionChangeEvent = true; 
        ServicesToRun = new ServiceBase[] 
        { 
         logService 
        }; 
        ServiceBase.Run(ServicesToRun); 
    } 
    
  3. 在服務實現覆蓋OnSessionChange事件,在那裏你可以轉儲用戶登錄/註銷和會話信息

    連接/斷開

    protected override void OnSessionChange(SessionChangeDescription changeDescription) 
    { 
        EventLog.WriteEvent(
         new EventInstance(100, 0, EventLogEntryType.Information), 
         String.Format("Reason: {0}, SessionId:{1}", changeDescription.Reason, changeDescription.SessionId)); 
        base.OnSessionChange(changeDescription); 
    } 
    
  4. 註冊服務,啓動並查看事件日誌中的記錄。

相關問題