Como fazer com que os lembretes do calendário do Outlook permaneçam no topo no Windows 7

112

Estou apenas começando a usar o Windows 7 e quero saber como fazer com que meus lembretes do Outlook sejam exibidos com destaque. Eles continuam abrindo discretamente, como apenas outra janela na pilha do Outlook na barra de tarefas. Como resultado, eu continuo ignorando-os porque eles aparecem atrás de todo o resto.

Como posso torná-los menos fáceis de ignorar?

(Claramente, geralmente não se quer aplicativos desagradáveis que se imponham. Mas há alguns lugares onde tal comportamento é desejável, e os lembretes de calendário do Outlook são um deles.)

    
por thursdaysgeek 01.03.2011 / 22:14

11 respostas

57

Eu tive o mesmo problema com o Outlook 2010. Use os passos mencionados abaixo, ele funciona como um encanto. Não se esqueça de ativar todas as macros: Trust Center > Configurações de macro.

  • 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. Clique OK. Abra o Outlook e pressione Alt + F11 para inicie o editor do VBA.
  • Na árvore à esquerda, expanda 'Objetos do Microsoft Office Outlook' e clique duas vezes em 'ThisOutlookSession'
  • Cole este código:

    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 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 Sub Application_Reminder(ByVal Item As Object)
    Dim ReminderWindowHWnd As Variant
    On Error Resume Next
    ReminderWindowHWnd = FindWindowA(vbNullString, "1 Reminder")
    SetWindowPos ReminderWindowHWnd, HWND_TOPMOST, 0, 0, 0, 0, FLAGS
    
    End Sub
    
  • Assinar a macro para que ela seja executada: Ferramentas > Assinatura Digital ... e escolha 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
por 16.08.2012 / 17:19
14

O AutoHotKey também pode ser usado para resolver isso. Este script colocará a janela de lembretes no topo sem roubar o foco (testado com o Win10 / Outlook 2013)

TrayTip Script, Looking for Reminder window to put on top, , 16
SetTitleMatchMode  2 ; windows contains
loop {
  WinWait, Reminder(s), 
  WinSet, AlwaysOnTop, on, Reminder(s)
  WinRestore, Reminder(s)
  TrayTip Outlook Reminder, You have an outlook reminder open, , 16
  WinWaitClose, Reminder(s), ,30
}

Script AHK - EXE compilado

    
por 02.02.2016 / 13:58
13

A melhor resposta que encontrei está aqui: Como obter o compromisso do Outlook lembretes para aparecer na frente de outras janelas novamente usando um simples VBA.

Implica adicionar algumas linhas de código VBA simples a "ThisOutlookSession". Agora, aparece uma janela toda vez. Muito melhor.

  • Create a Digital certificate for later
  • Hit Start and type ‘certificate’, select ‘Digital Certificate for VBA Projects’
  • Enter a name for your certificate
  • Done
  • Open Outlook and hit Alt + F11 to start the VBA editor.
  • In the tree on the left, expand ‘Microsoft Office Outlook Objects' and double click on ‘ThisOutlookSession’
  • Paste in this code, modifying the text in quotes to suit your preferences. Leave the quotes in.

    Private Sub Application_Reminder(ByVal Item As Object)
    
    
        If TypeOf Item Is AppointmentItem Then
        MsgBox "Message text", vbSystemModal, "Message title"
        End If
    
    
    End Sub
    
  • Sign the Macro so it will run by going to Tools > Digital Signature… and choosing the certificate you created earlier

  • Close the VBA window
    
por 14.03.2012 / 00:10
6

Não há como. Nossa empresa tentou escalá-lo diretamente para a Microsoft. Uma coisa que as pessoas fazem aqui é atribuir um som mais desagradável, para ajudar a perceber isso. Mas a Microsoft nos disse que é por design.

    
por 01.03.2011 / 22:34
6

O mesmo que o anwer de Gullu acima, mas com alteração para acomodar o título da janela diferente:

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 Const SWP_NOSIZE = &H1
Private Const SWP_NOMOVE = &H2
Private Const FLAGS As Long = SWP_NOMOVE Or SWP_NOSIZE
Private Const HWND_TOPMOST = -1

'// TO ACCOUNT FOR WINDOW TITLE CHANGING WITH NOTIFICATION COUNT:
Private Sub Application_Reminder(ByVal Item As Object)
    Dim ReminderWindowHWnd As Variant
    'On Error Resume Next
    On Error GoTo err
    'Loop 25 times as FindWindowA needs exact title which varies according to number of reminder items...
    Dim iReminderCount As Integer
    For iReminderCount = 1 To 25
        'Try two syntaxes...
        ReminderWindowHWnd = FindWindowA(vbNullString, iReminderCount & " Reminder"): SetWindowPos ReminderWindowHWnd, HWND_TOPMOST, 0, 0, 0, 0, FLAGS
        ReminderWindowHWnd = FindWindowA(vbNullString, iReminderCount & " Reminder(s)"): SetWindowPos ReminderWindowHWnd, HWND_TOPMOST, 0, 0, 0, 0, FLAGS
    Next
Exit Sub
err:
    Debug.Print err.Number & " - " & err.Description & " (iReminderCount = " & iReminderCount & ")"
    Resume Next
End Sub
    
por 03.02.2015 / 20:29
4

A partir da versão 1803 (fevereiro de 2018), a opção "Mostrar lembretes no topo de outras janelas" já está disponível. Não parece estar ativado por padrão.

    
por 01.06.2018 / 18:58
3

Isso também estava me incomodando. Após uma pesquisa intensa, encontrei uma resposta parcial: link

If you change the "Taskbar buttons" setting under the "Taskbar and Start Menu Properties" to "Never combine," then the grouping separates and the reminder pops-up in front of whatever else you have open.

Eu tentei testá-lo e descobri que ele era inconsistente; uma vez ficou escondido atrás do que eu estava trabalhando, e outra vez apareceu na frente. Em ambos os casos, havia um ícone na barra de tarefas que parecia diferente do próprio Outlook, então havia pelo menos uma chance que eu notaria.

    
por 10.05.2011 / 19:21
3

Eu usei o Filebox eXtender e quando o primeiro lembrete chegar abro-o e clico no novo 'pin' ícone no canto superior direito da barra de legendas. Então, quando o próximo lembrete chegar, ele aparecerá em primeiro plano ...

    
por 21.12.2011 / 01:26
1

Eu encontrei um addin chamado ShowReminders ( link ), que traz a janela de lembretes para o topo. Funciona mesmo quando você minimiza a janela de lembretes.

    
por 13.08.2013 / 14:58
0

Eu finalmente encontrei uma solução simples usando o Outlook VBA e um EXE simples.

Veja como nunca mais perdeu a perspectiva de marcar novamente a reunião.

Por que um aplicativo exe sozinho apenas para este fim? Bem, eu tinha a grande caixa vermelha embutida no VBA, mas essa solução estava cheia de problemas (eu acredito que é porque eu tenho que usar o hwnd e outras propriedades incomuns do sistema para manter a grande caixa vermelha no topo). Então, para tornar as coisas mais simples, por que não um EXE básico que faz uma coisa. Você pode usar ferramentas gratuitas da Microsoft (o Visual Studio Community 2015 é gratuito).

Este é o código EXE. Janelas simples formam uma aplicação com um formulário. Compile este código.

Imports System.Timers
Public Class Form1
    Dim tTimer As New Timer
    Public Sub New()
        InitializeComponent()
        Me.StartPosition = Windows.Forms.FormStartPosition.CenterScreen
        Me.TopMost = True
        Me.TopLevel = True
    End Sub
    Private Sub Form1_DoubleClick(sender As Object, e As EventArgs) Handles Me.DoubleClick
        Application.Exit()
    End Sub 
    Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles Me.Shown
        flashingQuick()
    End Sub
    Sub flashingQuick()
        tTimer.Start()
        AddHandler tTimer.Elapsed, New ElapsedEventHandler(AddressOf TimerTick)
    End Sub
    Sub TimerTick(ByVal source As [Object], ByVal e As ElapsedEventArgs)
        Dim theTimer As System.Timers.Timer = DirectCast(source, System.Timers.Timer)
        theTimer.Interval = 500
        theTimer.Enabled = True
        If Me.BackColor = System.Drawing.SystemColors.Control Then
            Me.BackColor = Color.Red
        Else
            Me.BackColor = System.Drawing.SystemColors.Control
        End If
    End Sub
End Class

E isso é tudo que eu preciso no outlook VBA. Coloque isso em ThisOutlookSession

Private Sub Application_Reminder(ByVal Item As Object)
    On Error Resume Next
    If Item.MessageClass <> "IPM.Appointment" Then
      Exit Sub
    End If
    Dim sAPPData As String
    Dim sFileName As String
    sAPPData = Environ("AppData")
    sFileName = "\Microsoft\Windows\Start Menu\Programs\BigRedBox\BigRedBox.exe"
    If Dir(sAPPData & sFileName) <> "" Then
        Call Shell(sAPPData & sFileName)
    End If
End Sub
    
por 07.08.2015 / 21:48
0

Esta é uma versão aprimorada da resposta do tbone que funciona nas versões em alemão.

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 BringWindowToTop Lib "user32" (ByVal hwnd As Long) As Boolean
Private Declare PtrSafe Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Boolean
Private Declare PtrSafe Function SetFocus Lib "user32" (ByVal hwnd 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 Sub Application_Reminder(ByVal Item As Object)
    Dim ReminderWindowHWnd As Variant
    On Error GoTo err
    'Loop 25 times as FindWindowA needs exact title which varies according to number of reminder items...
    Dim iReminderCount As Integer
    For iReminderCount = 1 To 25
        'Try two syntaxes...

        ReminderWindowHWnd = FindWindowA(vbNullString, iReminderCount & " Erinnerung")
        SetWindowPos ReminderWindowHWnd, HWND_TOPMOST, 0, 0, 0, 0, FLAGS
        BringWindowToTop (ReminderWindowHWnd)
        SetForegroundWindow ReminderWindowHWnd
        SetFocus ReminderWindowHWnd

        ReminderWindowHWnd = FindWindowA(vbNullString, iReminderCount & " Erinnerung(en)")
        SetWindowPos ReminderWindowHWnd, HWND_TOPMOST, 0, 0, 0, 0, FLAGS
        BringWindowToTop ReminderWindowHWnd
        SetForegroundWindow ReminderWindowHWnd
        SetFocus ReminderWindowHWnd
    Next
Exit Sub
err:
    Debug.Print err.Number & " - " & err.Description & " (iReminderCount = " & iReminderCount & ")"
    Resume Next
End Sub

Adicionei títulos de janela em alemão e também algumas novas funções ( BringWindowToTop , SetForegroundWindow e SetFocus ).

Funciona no meu Windows 10 alemão junto com o Outlook 2016.

Eu não consegui gerar um novo certificado (pressionando Iniciar e inserindo "certificado" não revelou nada), mas simplesmente selecionei outro certificado na lista ao assinar.

    
por 10.11.2015 / 12:12