Come fare in modo che i promemoria del Calendario di Outlook rimangano in primo piano in Windows 7


123

Ho appena iniziato a utilizzare Windows 7 e voglio sapere come far apparire i miei promemoria di Outlook e mostrarli in modo prominente. Continuano ad aprirsi con discrezione, come solo un'altra finestra nello stack di Outlook sulla barra delle applicazioni. Di conseguenza, continuo a trascurarli perché spuntano dietro tutto il resto.

Come posso renderli meno facili da trascurare?

(Chiaramente, di solito non si vogliono app fastidiose che si spingono in prima linea. Ma ci sono alcuni posti in cui tale comportamento è desiderabile e i promemoria del calendario di Outlook sono uno di questi.)


16
Questo è così necessario. Se si cade in un'intensa concentrazione è molto facile perdere un promemoria e notarlo seppellito sotto altre finestre solo dopo il ritardo. È ridicolo che non sia possibile con alcune semplici impostazioni. A che serve un promemoria se non lo ricevi prontamente ?!
Mario,

Risposte:


61

Ho avuto lo stesso problema con Outlook 2010. Utilizzare i passaggi indicati di seguito, funziona come un fascino. Non dimenticare di abilitare tutte le macro: Centro protezione> Impostazioni macro.

  • Crea un certificato digitale per dopo: premi Start e digita "certificato", seleziona "Certificato digitale per progetti VBA"
  • Inserisci un nome per il tuo certificato. Clicca OK. Apri Outlook e premi Alt+ F11per avviare l'editor VBA.
  • Nella struttura a sinistra, espandere "Oggetti di Microsoft Office Outlook" e fare doppio clic su "ThisOutlookSession"
  • Incolla in questo codice:

    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
    
  • Firma la macro in modo che venga eseguita: Strumenti> Firma digitale ... e scegli il certificato che hai creato in precedenza

  • Chiudi la finestra VBA
  • Abilita tutte le macro in File> Opzioni> Centro protezione> Impostazioni Centro protezione> Impostazioni macro

3
ho notato, a volte (normalmente quando avvii Outlook) il primo promemoria non rimarrà in primo piano. Dopo aver fatto clic su Ignora e chiuso il promemoria, tutti i promemoria successivi rimangono in primo piano. Non so perché.
Gullu,

3
L' On Error Resume Nextunica si applica a quel Sottotitolo e impedisce solo l'arresto anomalo dell'intera macro. Questo è solo l'uso standard di VBA.
Jeff Martin,

3
Ho avuto lo stesso problema indicato da Gullu nel suo primo commento. Per ovviare a questo, mostro una finestra di messaggio per il primo promemoria dopo aver riavviato Outlook (o il mio computer). Private messageAlreadyShown As Boolean Sottomarino privato Application_Reminder (elemento ByVal come oggetto) On Error Resume Next Se non messageAlreadyShown, quindi MsgBox "First Reminder", vbSystemModal, "" End If messageAlreadyShown = True ReminderWindow = FindWindowA (vbNullString, "1 Reminder") SetWindowPos ReminderWindow, HWND_TOPMOST, 0, 0, 0, 0, FLAGS End Sub
helios456

3
Ho avuto difficoltà a trovare lo strumento per creare un certificato autofirmato per la macro. L'ho trovato in C: \ Programmi \ Microsoft Office \ OfficeXX, lo strumento SELFCERT.EXE.
SSZero

3
Ho cambiato il mio per trovare "1 promemoria" e poi ha funzionato.
Robert Brooker,

18

AutoHotKey può anche essere usato per risolvere questo problema. Questo script metterà in primo piano la finestra del promemoria senza rubare lo stato attivo (testato 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 compilato


+1 per l'utilizzo di AHK. Ho appena provato questo in win 7 / outlook 2016. Porta la vista in primo piano ma in realtà non ruba l'attenzione se stai scrivendo. Esattamente quello che volevo! (Ho appena rimosso le punte del vassoio però :))
Fawix

1
Si noti che esiste un modo molto semplice per avviare lo script con Windows. Basta inserirlo nella cartellaC:\Users\<username>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
Fawix,

I collegamenti Script AHK e EXE compilati sono interrotti. Ho copiato e incollato lo script sopra nel mio script AutoHotKey.ahk e non ha funzionato.
Mike Cole,


1
È possibile accedere facilmente alla cartella di avvio inserendo shell:startupuna barra degli indirizzi o la casella
Esegui

13

La migliore risposta che ho trovato è qui: Come ottenere i promemoria degli appuntamenti di Outlook che compaiono di nuovo davanti ad altre finestre usando un semplice VBA.

Implica l'aggiunta di alcune righe di semplice codice VBA a "ThisOutlookSession". Ora apre una finestra ogni volta. Molto meglio.

  • Crea un certificato digitale per dopo
  • Premi Start e digita "certificato", seleziona "Certificato digitale per progetti VBA"
  • Inserisci un nome per il tuo certificato
  • Fatto
  • Apri Outlook e premi Alt + F11 per avviare l'editor VBA.
  • Nella struttura a sinistra, espandere "Oggetti di Microsoft Office Outlook" e fare doppio clic su "ThisOutlookSession"
  • Incolla questo codice, modificando il testo tra virgolette in base alle tue preferenze. Lascia le virgolette.

    Private Sub Application_Reminder(ByVal Item As Object)
    
    
        If TypeOf Item Is AppointmentItem Then
        MsgBox "Message text", vbSystemModal, "Message title"
        End If
    
    
    End Sub
    
  • Firma la macro in modo che venga eseguita andando su Strumenti> Firma digitale ... e scegliendo il certificato che hai creato in precedenza

  • Chiudi la finestra VBA

Ho provato questo in Outlook 2010, Windows 7 ma non ha funzionato :(
tekumara,

Utilizzato questo come parte della soluzione di Gullu. Grazie mille
Smandoli,

Questo ha funzionato su Outlook 2007, mentre Gullu non l'ha fatto.
Will Sheppard,

7

A partire dalla versione 1803 (febbraio 2018), è ora disponibile l'opzione "Mostra promemoria sopra altre finestre". Non sembra essere abilitato per impostazione predefinita.

inserisci qui la descrizione dell'immagine


3
Non ho ancora la versione aggiornata, ma è fantastico! E sono passati solo 7 anni da quando l'ho chiesto. (E questo è un dis presso MS, nonché un ringraziamento a te.)
giovedì

2
Questo è un eccellente aggiornamento di una vecchia domanda. Nota che questo non è esattamente lo stesso di "sempre in primo piano", ma garantisce che la finestra si apra in cima all'ordine z, quindi gli utenti hanno meno probabilità di perderlo.
Marc LaFleur,

6

Non c'è alcun modo. La nostra azienda ha provato a inoltrarlo direttamente a Microsoft. Una cosa che la gente fa qui è assegnargli un suono più odioso, per notarlo. Ma Microsoft ci ha detto che è in base alla progettazione.


11
Lavoro in una fattoria di cubi: cerco di mantenere il computer silenzioso per gli altri. :(
giovedì giovedì

3
Se stessero veramente progettando, lo farebbero per impostazione predefinita, ma consentirebbero di cambiarlo. Loro "progettano", impariamo a sopportarlo?
giovedì giovedì

Vedi la mia risposta Finalmente abbiamo una soluzione.
Gullu,

Ho trovato una soluzione di terze parti. Strumenti effettivi Actual Window Guard $ 30 (che è anche incluso nel loro prodotto completo Actual Windows Manager $ 50) consente di assegnare le finestre sempre in primo piano. Inoltre è facile attivare e disattivare la funzione. (nota che non solo per aiutare a rendere più semplice l'accettazione del prezzo). Ho trovato questi quando ho provato gli strumenti di utilità desktop virtuale e multi-monitor. Sto usando quest'ultimo da un paio di mesi e ne sono molto contento.
Javaru,

Immagino che la soluzione sia usare uno strumento migliore! Peccato che non sia una scelta per me :(
Jonathan Benn,

6

Come la risposta di Gullu sopra, ma con modifiche per adattarsi al diverso titolo della finestra:

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

Ancora meglio sarebbe qualcosa del genere Dim olApp As Outlook.Application Set olApp = New Outlook.Application iReminderCount = olApp.Reminders.CountQuindi potresti rimuovere il loop.
Zusukar,

@Zusukar Reminders.Countrestituisce il numero totale di promemoria impostati negli appuntamenti, non nella finestra di dialogo promemoria attiva Nel mio sistema, ad esempio, restituisce 22.
Geoff,

@Zusukar Puoi idealmente usare la proprietà Reminder.IsVisible per contare quelli visibili, ma questo è sempre falso - presumibilmente l'evento si verifica prima che il promemoria sia contrassegnato come visibile.
Geoff,

3

Anche questo mi dava fastidio. Dopo alcune intense ricerche ho trovato una risposta parziale: http://www.pcreview.co.uk/forums/hidden-outlook-reminders-t3972914.html

Se modifichi l'impostazione "Pulsanti della barra delle applicazioni" in "Proprietà della barra delle applicazioni e del menu Start" su "Non combinare mai", il raggruppamento si separa e il promemoria si apre di fronte a qualsiasi altra cosa tu abbia aperto.

Ho provato a provarlo e ho scoperto che era incoerente; una volta è rimasto nascosto dietro quello su cui stavo lavorando, e un'altra volta è saltato fuori in primo piano. In entrambi i casi c'era un'icona sulla barra delle applicazioni che sembrava diversa dalla stessa Outlook, quindi c'era almeno una possibilità che me ne accorgessi.


Non è stato possibile far funzionare correttamente Outlook 2013 anche con Never Combine. Outlook 2013, Windows 7 a 32 bit.
Dom

Questa non è una buona soluzione per me, poiché preferisco avere le app combinate nella barra delle applicazioni
Jonathan Benn,

3

Ho usato Filebox eXtender e quando arriva il primo promemoria lo apro e faccio clic sulla nuova icona "pin" in alto a destra nella barra dei sottotitoli. Quindi quando arriva il prossimo promemoria, arriva in primo piano ...


PinMe! farà lo stesso. È uno strumento portatile gratuito e svolge questo compito estremamente bene. L'ho provato Outlook 2013 e funziona esattamente come lo voglio. Primo piano di Outlook o ridotto a icona, il promemoria del calendario viene sempre visualizzato in primo piano.
Dom

@Sun andrà a dare PinMe! un colpo
Chris Marisic,

@Sun ho impostato "super pin" nella finestra di notifica che dovrebbe assicurarsi che sia sempre perpetuamente visibile, qualunque cosa accada fino a quando non lo elimini. Funziona come pubblicizzato per impostazione predefinita e recapita le notifiche successive. eccezionale.
Chris Marisic,

Ho provato PinMe e non riesco a far rimanere in primo piano la finestra !! ??
tbone,

1

Ho trovato un componente aggiuntivo chiamato ShowReminders ( http://www.sagelamp.com/pages/showreminders.aspx ), che porta in alto la finestra dei promemoria. Funziona anche quando si minimizza la finestra del promemoria.


3
Dice prodotto è di $ 20 come di ottobre 2014.
Sole

L'installazione non riesce per me su 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 trovo una soluzione semplice usando Outlook VBA e un semplice EXE.

Ecco come non perdere mai più l'appuntamento con la riunione di Outlook.

Perché un'applicazione exe autonoma solo per questo scopo? Beh, avevo la grande scatola rossa incorporata nel VBA, ma quella soluzione era piena di problemi (credo che sia perché devo usare hwnd e altre proprietà di sistema insolite per mantenere in cima la grande scatola rossa). Quindi, per semplificare le cose, perché non un EXE di base che fa una cosa. È possibile utilizzare strumenti gratuiti di Microsoft (Visual Studio Community 2015 è gratuito).

Questo è il codice EXE. semplice applicazione Windows Form con un unico modulo. Compila questo codice.

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 questo è tutto ciò di cui ho bisogno nell'outlook VBA. Metti questo in 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

Questa è una versione migliorata della risposta di tbone che funziona su versioni tedesche.

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

Ho aggiunto titoli di finestre tedeschi e anche alcune nuove funzioni ( BringWindowToTop, SetForegroundWindowe SetFocus).

Funziona sul mio Windows 10 tedesco insieme a Outlook 2016.

Non sono riuscito a generare un nuovo certificato (premendo Start e digitando "certificato" non è stato rivelato nulla), ma ho semplicemente selezionato un altro certificato nell'elenco durante la firma.


questo fa lampeggiare l'applicazione ma non porta in primo piano la finestra di notifica
KIC
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.