Questão Como fazer lembretes do calendário do Outlook ficar no topo no Windows 7


Estou apenas começando a usar o Windows 7 e quero saber como fazer com que meus lembretes do Outlook sejam exibidos de forma proeminente. 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 por trás de todo o resto.

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

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


111


origem


Isso é tão necessário. Se alguém cair em concentração intensa, é muito fácil perder um lembrete e notá-lo enterrado sob outras janelas somente depois que você se atrasar. É ridículo que não seja possível com alguma configuração simples. Que bom é um lembrete se você não o fizer prontamente ?! - Mario


Respostas:


Eu tive o mesmo problema com o Outlook 2010. Use os passos mencionados abaixo, funciona como um encanto. Não se esqueça de ativar todas as macros: Centro de Confiabilidade> 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 clique em Alt + F11 para inicie o editor do VBA.
  • Na árvore à esquerda, expanda 'Objetos do Microsoft Office Outlook' e clique duas vezes em 'ThisOutlookSession'
  • Cole neste 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
    
  • Assine a Macro para que ela seja executada: Ferramentas> Assinatura Digital ... e escolha o certificado que você criou anteriormente

  • Feche a janela do VBA
  • Ative todas as macros em Arquivo> Opções> Central de Confiabilidade> Configurações da Central de Confiabilidade> Configurações de Macro

57



Eu notei, às vezes (normalmente quando você inicia o Outlook) o primeiro lembrete não vai ficar no topo. Depois de clicar em Ignorar e fechar o lembrete, todos os lembretes subsequentes permanecem no topo. Não sei porque. - Gullu
o On Error Resume Next aplica-se apenas a esse Sub e apenas evita que toda a macro falhe. Esse é apenas o uso padrão do VBA. - Jeff Martin
Eu tive o mesmo problema que Gullu indicou em seu primeiro comentário. Para contornar isso, mostro uma caixa de mensagem para o primeiro lembrete depois de reiniciar o outlook (ou meu computador). Private messageAlreadyShown As Boolean Private Sub Application_Reminder (ByVal Item como objeto) On Error Resume Next Se não messageAlreadyShown então MsgBox "First Reminder", vbSystemModal, "" Fim se messageAlreadyShown = True ReminderWindow = FindWindowA (vbNullString, "1 lembrete") SetWindowPos ReminderWindow, HWND_TOPMOST, 0, 0, 0, 0, FLAGS End Sub - helios456
Eu tive problemas para encontrar a ferramenta para criar um certificado autoassinado para a macro. Eu encontrei em C: \ Arquivos de Programas \ Microsoft Office \ OfficeXX, a ferramenta SELFCERT.EXE. - SSZero
Eu mudei o meu para encontrar "1 lembrete (s)" e depois funcionou. - Robert Brooker


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


14



+1 para usar o AHK. Acabei de testar isso no win 7 / outlook 2016. Ele traz a visão para a frente, mas não rouba o foco se você estiver digitando. Exatamente o que eu queria! (Acabei de remover as pontas da bandeja embora :)) - Fawix
Observe que há uma maneira muito fácil de iniciar o script com o Windows. Basta colocá-lo na pasta C:\Users\<username>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup - Fawix
Os links Script AHK e compilado EXE estão quebrados. Eu copiei e colei o script acima em meu script AutoHotKey.ahk e ele não funcionou. - Mike Cole
Isso funcionou como um encanto para mim. AHK foi a primeira coisa que tentei, mas por alguma razão não consegui detectar a janela. Obrigado! - Grinn
aqui está o EXE compilado drive.google.com/file/d/0B_pJVd8U0PfcWkZWNmhEYncwQjA/view - user664174


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

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

  • 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
  • Feito
  • Abra o Outlook e pressione Alt + F11 para iniciar o editor do VBA.
  • Na árvore à esquerda, expanda ‘Microsoft Office Outlook Objects’ e clique duas vezes em ‘ThisOutlookSession’
  • Cole este código, modificando o texto entre aspas para atender às suas preferências. Deixe as cotações em.

    Private Sub Application_Reminder(ByVal Item As Object)
    
    
        If TypeOf Item Is AppointmentItem Then
        MsgBox "Message text", vbSystemModal, "Message title"
        End If
    
    
    End Sub
    
  • Assine a Macro para que ela seja executada acessando Ferramentas> Assinatura digital ... e escolhendo o certificado que você criou anteriormente

  • Feche a janela do VBA

13



Tentei isso no Outlook 2010, o Windows 7, mas não funcionou :( - tekumara
Usou isso como parte da solução da Gullu. Muito obrigado. - Smandoli
Isso funcionou no Outlook 2007, enquanto o de Gullu não funcionou. - Will Sheppard


Não tem jeito. 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.


6



Eu trabalho em uma fazenda de cubos - tento manter meu computador silencioso para os outros. :( - thursdaysgeek
Se eles estivessem realmente projetando, eles fariam isso por padrão, mas permitiriam que ele fosse alterado. Eles "design", aprendemos a aturar isso? - thursdaysgeek
Veja minha resposta. Nós finalmente temos uma solução. - Gullu
Eu encontrei uma solução de terceiros. Ferramentas Reais Guarda de janela real US $ 30 (que também está incluso em todo o seu produto Gerente real do Windows $ 50) permite atribuir janelas para estar sempre no topo. Além disso, é fácil ligar e desligar o recurso. (note que isso faz mais do que isso apenas para ajudar a tornar o preço mais fácil de aceitar.) Encontrei-os quando experimentei ferramentas de desktop virtuais e utilitários de vários monitores. Eu tenho usado o último por um par de meses agora e estou muito feliz com isso. - Javaru
Eu acho que a solução é usar uma ferramenta melhor! Para o mal que não é uma escolha para mim :( - Jonathan Benn


O mesmo que o anwer de Gullu acima, mas com mudança para acomodar diferentes títulos de janela:

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

6



Ainda melhor seria algo como Dim olApp As Outlook.Application Set olApp = New Outlook.Application iReminderCount = olApp.Reminders.Count Então você pode remover o loop. - Zusukar
@Zusukar Reminders.Count retorna o número total de lembretes definidos nos compromissos, não na caixa de diálogo do lembrete ativo. No meu sistema, isso retorna 22, por exemplo. - Geoff
@Zusukar Você pode idealmente usar a propriedade Reminder.IsVisible para contar os visíveis, mas isso é sempre falso - presumivelmente, o evento acontece antes que o lembrete seja marcado como visível. - Geoff


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

enter image description here


4



Ainda não tenho a versão atualizada, mas isso é ótimo! E faz apenas 7 anos desde que eu perguntei também. (E isso é um dis em MS, bem como um agradecimento a você.) - thursdaysgeek
Esta é uma excelente atualização para uma pergunta antiga. Observe que isso não é exatamente o mesmo que "always on top", mas garante que a janela aparece na parte superior da ordem z, de forma que os usuários tenham menos probabilidade de errar. - Marc LaFleur


Isso estava me incomodando também. Depois de uma busca intensa, encontrei uma resposta parcial: http://www.pcreview.co.uk/forums/hidden-outlook-reminders-t3972914.html

Se você alterar os "botões da barra de tarefas"   configuração sob a "barra de tarefas e iniciar   Propriedades do menu "para" Nunca combinar "   então o agrupamento separa e o   lembrete aparece na frente do que quer   mais você tem aberto.

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.


3



Não foi possível fazer com que o Outlook 2013 se comportasse corretamente, mesmo com o Never Combine. Outlook 2013, Windows 7 de 32 bits. - Sun
Esta não é uma boa solução para mim, pois prefiro que os apps sejam combinados na barra de tarefas - Jonathan Benn


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


3



Me marque! fará o mesmo. É uma ferramenta portátil gratuita e faz esta tarefa extremamente bem. Eu testei Outlook 2013 e funciona exatamente como eu quero. No primeiro plano do Outlook ou minimizado, o lembrete de calendário sempre aparece na frente. - Sun
@Sun vai dar PinMe! um tiro - Chris Marisic
@Sun i setup "super pin" na janela de notificação que deve garantir que esteja sempre perpetuamente visível, não importa o que seja, até que eu a dispense. Funciona como anunciado fora da caixa e fornece notificações sucessivas. impressionante. - Chris Marisic
Eu tentei PinMe e não consigo obter a janela para ficar no topo, em tudo !! ?? - tbone


Eu encontrei um addin chamado ShowReminders (http://www.sagelamp.com/pages/showreminders.aspx), que traz a janela de lembretes para o topo. Funciona mesmo quando você minimiza a janela de lembretes.


1



Diz que o produto custa US $ 20 em outubro de 2014. - Sun
A instalação falha para mim no Windows 10: The following package files could not be found: C:\Users\ukeim\AppData\Local\Temp\IXP000.TMP\Office2007PIARedist\o2007pia.msi - Uwe Keim


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

Aqui está como nunca perdi uma perspectiva que conhece compromisso novamente.

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 no 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

0