我想通過一個windows服務捕獲鎖/解鎖/開始/關機/註銷並登錄事件,然後我想爲每個事件啓動一個函數,以便捕獲時間當事件發生時。用java windows服務捕獲windows事件
我想通過Windows服務來做到這一點,所以我不需要手動運行程序。我想通過java語言來運行這個程序。
我想通過一個windows服務捕獲鎖/解鎖/開始/關機/註銷並登錄事件,然後我想爲每個事件啓動一個函數,以便捕獲時間當事件發生時。用java windows服務捕獲windows事件
我想通過Windows服務來做到這一點,所以我不需要手動運行程序。我想通過java語言來運行這個程序。
看起來您需要使用JNA並使用本地Windows調用編寫捕獲代碼。
有一個類java.awt.Robot可以反向模擬OS事件,但我不知道如何捕獲純Java中的事件。
在C#中,它非常簡單。我可以用C#向你展示代碼,如果你想使用Java作爲語言,你可以將它轉換爲Ja.Net。 (如果你真的想使用JVM,儘管這不會有太大幫助)。
內部程序的主要方法設置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);
}
連接/斷開
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);
}
註冊服務,啓動並查看事件日誌中的記錄。