A notificação do Calendário do Outlook não aparece em cima de outras janelas

4

Estou usando o Outlook 2007 no Vista Business de 64 bits e tenho tido problemas com as notificações do Calendário do Outlook aparecendo por trás de outras janelas. Isso deixa minha única pista de que eu deveria estar em uma reunião que há uma entrada azul na barra de tarefas. Eu não encontrei um cenário relacionado a isso.

Alguém mais teve esse problema? Alguém sabe como obter janelas de notificação em cima de outras janelas de forma consistente?

    
por David Thornley 29.09.2009 / 19:05

2 respostas

1

Este suplemento gratuito pode ajudar a forçar a janela de lembrete a aparecer como você deseja: link

    
por 05.08.2011 / 15:07
0

Se você quiser uma resposta no Outlook, esta postagem terá a maior parte da resposta. No entanto, não funcionou para mim, pois a janela de lembrete não é visível até que a sub-rotina Application_Reminder tenha terminado, o que significa que FindWindowA não pode encontrar a janela de lembrete.

Se você tiver o mesmo problema, eu invadi uma solução usando SetTimer . Vou re-postar as etapas na íntegra, embora a parte superior e traseira seja apenas uma repetição do outro post .

  • Crie um certificado digital para mais tarde. Clique em Iniciar e digite 'certificado', selecione 'Certificado digital para projetos VBA'
  • Digite um nome para o seu certificado e pressione Concluído
  • Abra o Outlook e pressione ALT + F11 para iniciar o editor do VBA.
  • Na árvore à esquerda, expanda 'Objetos do Microsoft Office Outlook' e clique duas vezes em 'ThisOutlookSession'
  • Cole o seguinte código em:

Option Explicit

Private Sub Application_Quit()

    ' Turn off timer upon quitting VERY IMPORTANT
    Call DeactivateTimer

End Sub

Private Sub Application_Reminder(ByVal Item As Object)

    ' Call helper function in 1 second as reminder window not yet visible
    If TypeOf Item Is AppointmentItem Then ActivateTimer (1)

End Sub

  • Adicione um novo módulo clicando com o botão direito do mouse em 'ThisOutlookSession' e selecionando Inserir > Módulo
  • No novo módulo (para o qual você deve ter alternado), cole o seguinte código:

Option Explicit

Private Declare PtrSafe Function FindWindowA Lib "user32" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As Long

Private Declare PtrSafe Function SetWindowPos Lib "user32" ( _
    ByVal hwnd As Long, _
    ByVal hWndInsertAfter As Long, _
    ByVal X As Long, _
    ByVal Y As Long, _
    ByVal cx As Long, _
    ByVal cy As Long, _
    ByVal wFlags As Long) As Long

Private Declare PtrSafe Function SetTimer Lib "user32" ( _
    ByVal hwnd As Long, _
    ByVal nIDEvent As Long, _
    ByVal uElapse As Long, _
    ByVal lpTimerfunc As Long) As Long

Private Declare PtrSafe Function KillTimer Lib "user32" ( _
    ByVal hwnd As Long, _
    ByVal nIDEvent As Long) As Long

Private Const SWP_NOSIZE = &H1
Private Const SWP_NOMOVE = &H2
Private Const FLAGS As Long = SWP_NOMOVE Or SWP_NOSIZE
Private Const HWND_TOPMOST = -1

Private TimerID As Long 'Need a timer ID to eventually turn off the timer. If the timer ID is not 0 then the timer is running

Public Sub ActivateTimer(ByVal nSeconds As Long)

    'The SetTimer call accepts milliseconds, so convert to seconds
    nSeconds = nSeconds * 1000

    ' Check to see if timer is running before call to SetTimer
    If TimerID <> 0 Then Call DeactivateTimer

    TimerID = SetTimer(0, 0, nSeconds, AddressOf Reminder_Helper)

    If TimerID = 0 Then MsgBox "The timer failed to activate."

End Sub

Public Sub DeactivateTimer()

Dim lSuccess As Long

    If TimerID <> 0 Then
        lSuccess = KillTimer(0, TimerID)
        If lSuccess = 0 Then
            MsgBox "The timer failed to deactivate."
        Else
            TimerID = 0
        End If
    End If

End Sub

Private Sub Reminder_Helper(ByVal hwnd As Long, ByVal uMsg As Long, ByVal idevent As Long, ByVal Systime As Long)

Dim ReminderWindowHWnd As Variant

    If idevent = TimerID Then

        On Error Resume Next
        ReminderWindowHWnd = FindWindowA(vbNullString, "1 Reminder")
        SetWindowPos ReminderWindowHWnd, HWND_TOPMOST, 0, 0, 0, 0, FLAGS
        DeactivateTimer

    End If

End Sub

  • Assinar a macro para que ela seja executada acessando o > Assinatura Digital ... e escolhendo o certificado que você criou anteriormente
  • Feche a janela do VBA
  • Ativar todas as macros em Arquivo > Opções > Centro de Confiança > Configurações da Central de Confiabilidade > Configurações de macro
  • Feche e reabra o Outlook

Eu teria postado isso no final do outro post , mas ele está bloqueado para novos usuários como eu!

    
por 13.08.2013 / 18:46