Outlook启动和关闭事件ID

时间:2013-08-30 14:53:24

标签: outlook event-log

我正在编写批处理脚本,以便在Outlook关闭时备份我的pst文件。

我正在考虑根据Windows事件ID进行计划任务。

我搜索了Microsoft Outlook的各种事件ID,但无法获得所需的事件。

我尝试分析eventvwr但无法找到所需的。

我正在使用Windows 7 Professional 64位,Outlook 2010.我正在寻找Outlook的开始和停止事件ID

2 个答案:

答案 0 :(得分:3)

正如我之前所说的,据我所知,没有Outlook启动/关闭事件,如果你安装了AddIns,你可以使用ID:45来检测启动但是你还没有关闭事件!

在Outlook Start / Close上获取事件的唯一方法是通过Outlook AddIn或在Outlook Startup和Quit Event上执行的VBA-Makro自行创建。

Outlook AddIn示例:

public partial class ThisAddIn
{
    private EventLog log = null;

    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        log = new EventLog();
        log.Source = "OutlookAddIn";
        log.Log = "Application";
        log.WriteEntry("Outlook start", EventLogEntryType.Information, 1);
    }

    private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
    {
        if (log != null)
        {
            log.WriteEntry("Outlook stop", EventLogEntryType.Information, 0);
        }
    }

    #region VSTO generated code

    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InternalStartup()
    {
        this.Startup += new System.EventHandler(ThisAddIn_Startup);
        this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
    }

    #endregion
}

<强>更新

我自己尝试了VBA解决方案并且有效; - )

使用以下代码(Source

创建一个模块
Option Explicit

  Declare Function RegisterEventSource Lib "advapi32.dll" Alias _
    "RegisterEventSourceA" (ByVal lpUNCServerName As String, _
    ByVal lpSourceName As String) As Long
  Declare Function DeregisterEventSource Lib "advapi32.dll" ( _
    ByVal hEventLog As Long) As Long
  Declare Function ReportEvent Lib "advapi32.dll" Alias _
  "ReportEventA" ( _
    ByVal hEventLog As Long, ByVal wType As Integer, _
    ByVal wCategory As Integer, ByVal dwEventID As Long, _
    ByVal lpUserSid As Any, ByVal wNumStrings As Integer, _
    ByVal dwDataSize As Long, plpStrings As Long, _
    lpRawData As Any) As Boolean
  Declare Function GetLastError Lib "kernel32" () As Long
  Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
    hpvDest As Any, hpvSource As Any, _
    ByVal cbCopy As Long)
  Declare Function GlobalAlloc Lib "kernel32" ( _
     ByVal wFlags As Long, _
     ByVal dwBytes As Long) As Long
  Declare Function GlobalFree Lib "kernel32" ( _
     ByVal hMem As Long) As Long

  Public Const EVENTLOG_SUCCESS = 0
  Public Const EVENTLOG_ERROR_TYPE = 1
  Public Const EVENTLOG_WARNING_TYPE = 2
  Public Const EVENTLOG_INFORMATION_TYPE = 4
  Public Const EVENTLOG_AUDIT_SUCCESS = 8
  Public Const EVENTLOG_AUDIT_FAILURE = 10

  Public Sub LogNTEvent(sString As String, iLogType As Integer, _
    iEventID As Long)
    Dim bRC As Boolean
    Dim iNumStrings As Integer
    Dim hEventLog As Long
    Dim hMsgs As Long
    Dim cbStringSize As Long
    hEventLog = RegisterEventSource("", Application.Name)
    cbStringSize = Len(sString) + 1
    hMsgs = GlobalAlloc(&H40, cbStringSize)
    CopyMemory ByVal hMsgs, ByVal sString, cbStringSize
    iNumStrings = 1
    If ReportEvent(hEventLog, _
       iLogType, 0, _
       iEventID, 0&, _
       iNumStrings, cbStringSize, _
       hMsgs, hMsgs) = 0 Then
       MsgBox GetLastError()
    End If
    Call GlobalFree(hMsgs)
    DeregisterEventSource (hEventLog)
  End Sub

这就是你的OutlookSessionApplication文件应该是这样的(how to get there)并且不要忘记允许makros或签署你已写的那个; - )

   Private Sub Application_Quit()
        Call LogNTEvent("OUTLOOK QUIT", _
              EVENTLOG_INFORMATION_TYPE, 1000)
    End Sub

    Private Sub Application_Startup()
        Call LogNTEvent("OUTLOOK START", _
              EVENTLOG_INFORMATION_TYPE, 1001)
    End Sub

答案 1 :(得分:0)

使用&#34; outlookspy&#34;。它是第三方应用程序,能够找到您需要捕获新邮件,新项目等的... ...