我正在编写批处理脚本,以便在Outlook关闭时备份我的pst文件。
我正在考虑根据Windows事件ID进行计划任务。
我搜索了Microsoft Outlook的各种事件ID,但无法获得所需的事件。
我尝试分析eventvwr但无法找到所需的。
我正在使用Windows 7 Professional 64位,Outlook 2010.我正在寻找Outlook的开始和停止事件ID
答案 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;。它是第三方应用程序,能够找到您需要捕获新邮件,新项目等的... ...