Cómo hacer que los recordatorios del calendario de Outlook se mantengan en la cima en Windows 7


123

Estoy empezando a usar Windows 7 y quiero saber cómo hacer que mis recordatorios de Outlook aparezcan y se muestren de manera destacada. Siguen abriéndose discretamente, como una ventana más en la pila de Outlook en la barra de tareas. Como resultado, sigo pasándolos por alto porque aparecen detrás de todo lo demás.

¿Cómo hago que sean menos fáciles de pasar por alto?

(Claramente, uno generalmente no quiere aplicaciones desagradables que se pongan a la vanguardia. Pero hay algunos lugares donde tal comportamiento es deseable, y los recordatorios del calendario de Outlook son uno de ellos).


16
Esto es muy necesario. Si uno cae en una concentración intensa, es muy fácil pasar por alto un recordatorio y notarlo enterrado debajo de otras ventanas solo después de llegar tarde. Es ridículo que no sea posible con una configuración simple. ¿De qué sirve un recordatorio si no lo recibe de inmediato?
Mario

Respuestas:


61

Tuve el mismo problema con Outlook 2010. Utilice los pasos mencionados a continuación, funciona de maravilla. No olvide habilitar todas las macros: Centro de confianza> Configuración de macros.

  • Cree un certificado digital para más tarde: presione Inicio y escriba 'certificado', seleccione 'Certificado digital para proyectos VBA'
  • Ingrese un nombre para su certificado. Haga clic en Aceptar. Abra Outlook y presione Alt+ F11para iniciar el editor de VBA.
  • En el árbol de la izquierda, expanda 'Objetos de Microsoft Office Outlook' y haga doble clic en 'ThisOutlookSession'
  • Pega 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
    
  • Firme la macro para que se ejecute: Herramientas> Firma digital ... y elija el certificado que creó anteriormente

  • Cerrar la ventana de VBA
  • Habilite todas las macros en Archivo> Opciones> Centro de confianza> Configuración del Centro de confianza> Configuración de macro

3
Me di cuenta, a veces (normalmente cuando inicia Outlook) el primer recordatorio no se mantendrá en la parte superior. Una vez que haga clic en Descartar y cierre el recordatorio, todos los recordatorios posteriores permanecerán en la parte superior. No sé por qué
Gullu

3
El On Error Resume Nextúnico se aplica a ese Sub y solo evita que la macro completa se bloquee. Esto es solo el uso estándar de VBA.
Jeff Martin

3
Tuve el mismo problema que Gullu indicó en su primer comentario. Para evitar eso, muestro un cuadro de mensaje para el primer recordatorio después de reiniciar Outlook (o mi computadora). Private messageAlreadyShown As Boolean Private Sub Application_Reminder (ByVal Item As Object) On Error Resume Next Si no está messageAlreadyShown Entonces finaliza MsgBox "First Reminder", vbSystemModal, "" si messageAlreadyShown = True ReminderWindow = FindWindowA (vbNullString, "1 Reminder") SetWindowPos ReminderWindow, HWND_TOPMOST, 0, 0, 0, 0, FLAGS Finaliza Sub
helios456

3
Tuve problemas para encontrar la herramienta para crear un certificado autofirmado para la macro. Lo encontré en C: \ Archivos de programa \ Microsoft Office \ OfficeXX, la herramienta SELFCERT.EXE.
SSZero

3
Cambié el mío para encontrar "1 Recordatorio (s)" y luego funcionó.
Robert Brooker

18

AutoHotKey también se puede utilizar para resolver esto. Este script pondrá la ventana de recordatorio en la parte superior sin robar foco (probado con 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


+1 por usar AHK. Acabo de probar esto en win 7 / outlook 2016. Trae la vista al frente, pero en realidad no roba el foco si está escribiendo. ¡Exactamente lo que quería! (Aunque acabo de quitar las puntas de la bandeja :))
Fawix

1
Tenga en cuenta que hay una manera muy fácil de que el script comience con Windows. Simplemente póngalo en la carpetaC:\Users\<username>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
Fawix

El script AHK y los enlaces EXE compilados están rotos. Copié y pegué el script anterior en mi script AutoHotKey.ahk y no funcionó.
Mike Cole


1
Llegar a la carpeta de inicio se puede hacer fácilmente ingresando shell:startupen una barra de direcciones o en el cuadro de ejecución
Gert van den Berg

13

La mejor respuesta que he encontrado está aquí: Cómo hacer que los recordatorios de citas de Outlook vuelvan a aparecer frente a otras ventanas utilizando un simple VBA.

Implica agregar unas pocas líneas de código simple de VBA a "ThisOutlookSession". Ahora, aparece una ventana cada vez. Mucho mejor.

  • Crea un certificado digital para más tarde
  • Presione Inicio y escriba 'certificado', seleccione 'Certificado digital para proyectos VBA'
  • Ingrese un nombre para su certificado
  • Hecho
  • Abra Outlook y presione Alt + F11 para iniciar el editor de VBA.
  • En el árbol de la izquierda, expanda 'Objetos de Microsoft Office Outlook' y haga doble clic en 'ThisOutlookSession'
  • Pegue este código, modificando el texto entre comillas para adaptarlo a sus preferencias. Deja las comillas adentro.

    Private Sub Application_Reminder(ByVal Item As Object)
    
    
        If TypeOf Item Is AppointmentItem Then
        MsgBox "Message text", vbSystemModal, "Message title"
        End If
    
    
    End Sub
    
  • Firme la macro para que se ejecute yendo a Herramientas> Firma digital ... y eligiendo el certificado que creó anteriormente

  • Cerrar la ventana de VBA

Intenté esto en Outlook 2010, Windows 7 pero no funcionó :(
tekumara

Usé esto como parte de la solución de Gullu. Muchas gracias.
Smandoli

Esto funcionó en Outlook 2007, mientras que Gullu no.
Will Sheppard

7

A partir de la versión 1803 (febrero de 2018), la opción "Mostrar recordatorios sobre otras ventanas" ya está disponible. No parece estar habilitado de forma predeterminada.

ingrese la descripción de la imagen aquí


3
Todavía no tengo la versión actualizada, ¡pero es genial! Y solo han pasado 7 años desde que pregunté también. (Y eso es un dis en MS, así como un agradecimiento a usted.)
jueves

2
Esta es una excelente actualización de una vieja pregunta. Tenga en cuenta que esto no es lo mismo que "siempre en la parte superior", pero garantiza que la ventana aparezca en la parte superior del orden z, por lo que es menos probable que los usuarios se lo pierdan.
Marc LaFleur

6

No hay manera Nuestra compañía intentó escalarlo directamente a Microsoft. Una cosa que la gente hace aquí es asignarle un sonido más desagradable, para ayudar a notarlo. Pero Microsoft nos ha dicho que es por diseño.


11
Trabajo en una granja de cubos. Intento mantener mi computadora silenciosa para los demás. :(
thursdaysgeek

3
Si realmente estuvieran diseñando, lo harían de manera predeterminada, pero permitirían que se cambie. Ellos "diseñan", ¿aprendemos a soportarlo?
thursdaysgeek

Mira mi respuesta. Finalmente tenemos una solución.
Gullu

Encontré una solución de terceros. Actual Tools Actual Window Guard $ 30 (que también se incluye en su producto que abarca todo Actual Windows Manager $ 50) permite asignar ventanas para estar siempre en la parte superior. Además, es fácil activar y desactivar la función. (tenga en cuenta que hace más que eso para ayudar a que el precio sea más fácil de aceptar). Encontré esto cuando probé herramientas de utilidad de escritorio virtual y monitores múltiples. He estado usando este último durante un par de meses y estoy muy contento con él.
Javaru

¡Supongo que la solución es usar una herramienta mejor! Lo malo es que no es una opción para mí :(
Jonathan Benn

6

Igual que la respuesta de Gullu arriba pero con cambios para acomodar diferentes títulos de ventanas:

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

Aún mejor sería algo así. Dim olApp As Outlook.Application Set olApp = New Outlook.Application iReminderCount = olApp.Reminders.CountEntonces podría eliminar el bucle.
Zusukar

@Zusukar Reminders.Countdevuelve el número total de recordatorios establecidos en las citas, no en el cuadro de diálogo de recordatorio activo En mi sistema, esto devuelve 22, por ejemplo.
Geoff

@Zusukar Idealmente, podría usar la propiedad Reminder.IsVisible para contar los visibles, pero esto siempre es falso; presumiblemente, el evento ocurre antes de que el recordatorio se marque como visible.
Geoff

3

Esto también me estaba molestando. Después de una búsqueda intensa, encontré una respuesta parcial: http://www.pcreview.co.uk/forums/hidden-outlook-reminders-t3972914.html

Si cambia la configuración de "Botones de la barra de tareas" en "Propiedades de la barra de tareas y del menú Inicio" a "Nunca combinar", la agrupación se separa y aparece el recordatorio delante de cualquier otra cosa que haya abierto.

Traté de probarlo y descubrí que era inconsistente; una vez permaneció oculto detrás de lo que estaba trabajando, y otra vez apareció al frente. En ambos casos, había un ícono en la barra de tareas que se veía diferente al de Outlook, por lo que había al menos una posibilidad de que lo notara.


No se pudo hacer que Outlook 2013 se comportara correctamente incluso con Never Combine. Outlook 2013, Windows 7 de 32 bits.
Dom

Esta no es una buena solución para mí, ya que prefiero que las aplicaciones se combinen en la barra de tareas
Jonathan Benn

3

Utilicé Filebox eXtender y cuando aparece el primer recordatorio, lo abro y hago clic en el nuevo icono 'pin' en la parte superior derecha de la barra de subtítulos. Luego, cuando llega el próximo recordatorio, aparece en primer plano ...


¡Señalame! Hará lo mismo. Es una herramienta portátil gratuita y realiza esta tarea extremadamente bien. Lo probé en Outlook 2013 y funciona exactamente como lo quiero. Outlook en primer plano o minimizado, el recordatorio del calendario siempre aparece al frente.
Dom

¡@Sun va a dar PinMe! un tiro
Chris Marisic

@ Sun configuré el "súper pin" en la ventana de notificación que debería asegurarse de que siempre esté visible perpetuamente, pase lo que pase hasta que lo descarte. Funciona como se anuncia de fábrica, y entrega notificaciones sucesivas. increíble.
Chris Marisic

¡¿Intenté PinMe y no puedo conseguir que la ventana permanezca arriba, en absoluto ?!
tbone

1

Encontré un complemento llamado ShowReminders ( http://www.sagelamp.com/pages/showreminders.aspx ), que lleva la ventana de recordatorios a la parte superior. Incluso funciona cuando minimiza la ventana de recordatorio.


3
Dice que el producto cuesta $ 20 a partir de octubre de 2014.
Dom

La instalación me falla en Windows 10:The following package files could not be found: C:\Users\ukeim\AppData\Local\Temp\IXP000.TMP\Office2007PIARedist\o2007pia.msi
Uwe Keim

0

Finalmente encuentro una solución simple usando Outlook VBA y un EXE simple.

Aquí le mostramos cómo no volver a perder la cita de la reunión de Outlook.

¿Por qué una aplicación exe independiente solo para este propósito? Bueno, tenía el gran cuadro rojo incrustado en el VBA, pero esa solución estaba llena de problemas (creo que es porque tengo que usar hwnd y otras propiedades inusuales del sistema para mantener el gran cuadro rojo en la parte superior). Entonces, para simplificar las cosas, ¿por qué no un EXE básico que hace una cosa? Puede usar herramientas gratuitas de microsoft (Visual studio Community 2015 es gratis).

Este es el código EXE. Aplicación de formulario simple de Windows con un formulario. Compila 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

Y esto es todo lo que necesito en el panorama VBA. Pon esto en 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

Esta es una versión mejorada de la respuesta de tbone que funciona en versiones alemanas.

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

He añadido títulos alemanes de ventanas y también algunas nuevas funciones ( BringWindowToTop, SetForegroundWindowy SetFocus).

Funciona en mi Windows 10 alemán junto con Outlook 2016.

Yo no arreglo para generar un nuevo certificado (presionar puesta en marcha y la introducción de "certificado" no reveló nada), sino simplemente selecciona otro certificado en la lista al firmar.


esto hace que la aplicación simplemente parpadee pero no trae la ventana de notificación al frente
KIC
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.