0

我正在开发一个依赖于 Outlook Appointment 的 LastModificationTime 属性的 VSTO Outlook 加载项。问题是当缓存交换模式打开时,LastModificationTime 属性会在我每次关闭 Outlook 时自动更新。是否有可能的解决方案可以用来获取用户更改约会的日期和时间,而不是缓存交换模式更改约会的日期和时间?

看到没有很多回复,我想更详细地描述我的问题 - 这就是发生的事情:

  1. 我更改了一个项目(异常行为仅发生在我已更改的项目上)
  2. LastModificationTime 更改为我保存项目的时间(我通过 OutlookSpy 看到了更改)。(例如,LastModificationTime 下午 3:30:00)
  3. 我工作到下午 4:00:00 并检查 LastModificationTime,它仍然显示下午 3:30:00
  4. 我关闭前景
  5. 我打开 Outlook 并检查 LastModificationTime。现在 LastModificationTime 显示 3:30:42 而不是 3:30:00。为什么在我重新打开 Outlook 后它增加了 42 秒?

谢谢你能给我的任何建议。

4

1 回答 1

1

我能够为我的问题找到两种解决方法,#1 对我来说是不可接受的,#2 我实际使用过:

解决方案 #1:使用注册表项在加载项关闭时禁用 Exchange 服务器,并在加载项启动时重新启用它。下面是示例代码:

    Private Sub ThisAddIn_Startup(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Startup
    Try
        Dim regTopKey As String = "HKEY_CURRENT_USER"
        Dim regPath As String = "\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\13dbb0c8aa05101a9bb000aa002fc45a"
        Dim oldValue As Byte() = Registry.GetValue(regTopKey & regPath, "00036601_Backup", Nothing)
        If oldValue IsNot Nothing Then
            Registry.SetValue(regTopKey & regPath, "00036601", oldValue, RegistryValueKind.Binary)
        End If
    Catch
    End Try
End Sub

Private Sub ThisAddIn_Shutdown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shutdown
    Try
        Dim disableExchangeMode As Byte() = {4, 0, 0, 0}
        Dim regTopKey As String = "HKEY_CURRENT_USER"
        Dim regPath As String = "\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\13dbb0c8aa05101a9bb000aa002fc45a"
        Dim currentValue As Byte() = Registry.GetValue(regTopKey & regPath, "00036601", Nothing)
        If currentValue IsNot Nothing Then
            Registry.SetValue(regTopKey & regPath, "00036601_Backup", currentValue, RegistryValueKind.Binary)
        End If
        Registry.SetValue(regTopKey & regPath, "00036601", disableExchangeMode, RegistryValueKind.Binary)
    Catch
    End Try
End Sub

解决方案#2:检测用户何时更改约会项目并将更改保存在用户定义的属性字段中。下面是示例代码:

Private Sub appointmentSave(ByVal Item As Object) Handles _m_olAppointment.ItemChange, _m_olAppointment.ItemAdd
    Try
        Dim dateNow As Date = Date.Now
        If TypeOf Item Is Outlook.AppointmentItem Then
            If (dateNow - _lastFolderSwitch).TotalMilliseconds > 500 Then
                _lastFolderSwitch = dateNow
                Dim appointmentItem As Outlook.AppointmentItem = CType(Item, Outlook.AppointmentItem)
                If (dateNow - appointmentItem.LastModificationTime).TotalMilliseconds < 100 Then
                    Dim lastModifiedDate As Outlook.UserProperty = appointmentItem.UserProperties.Add("lastModifiedDate", Microsoft.Office.Interop.Outlook.OlUserPropertyType.olText, True)
                    lastModifiedDate.Value = dateNow.ToString
                    appointmentItem.Save()
                End If
            End If
        End If
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try
End Sub

谢谢所有帮助过的人

于 2010-02-23T20:29:38.873 回答