Comment faire en sorte que les rappels du calendrier Outlook restent en tête dans Windows 7

123

Je commence tout juste à utiliser Windows 7 et je veux savoir comment faire apparaître mes rappels Outlook et se montrer bien en vue. Ils continuent à s'ouvrir discrètement, comme une autre fenêtre de la pile Outlook dans la barre des tâches. En conséquence, je continue de les oublier car ils apparaissent derrière tout le reste.

Comment puis-je les rendre moins faciles à oublier?

(De toute évidence, on ne veut généralement pas d'applications désagréables qui se placent au premier plan. Mais il existe quelques endroits où un tel comportement est souhaitable, et les rappels du calendrier Outlook en font partie.)

thursdaysgeek
la source
16
C'est tellement nécessaire. Si vous tombez dans une concentration intense, il est très facile de rater un rappel et de remarquer qu'il est enterré sous d'autres fenêtres uniquement après votre retard. C'est ridicule que ce ne soit pas possible avec un réglage simple. À quoi sert un rappel si vous ne l'obtenez pas rapidement?!
Mario

Réponses:

61

J'ai eu le même problème avec Outlook 2010. Utilisez les étapes mentionnées ci-dessous, cela fonctionne comme un charme. N'oubliez pas d'activer toutes les macros: Centre de gestion de la confidentialité> Paramètres de macro.

  • Créez un certificat numérique pour plus tard: appuyez sur Démarrer et tapez "certificat", sélectionnez "Certificat numérique pour les projets VBA"
  • Entrez un nom pour votre certificat. Cliquez sur OK. Ouvrez Outlook et appuyez sur Alt+ F11pour lancer l'éditeur VBA.
  • Dans l'arborescence à gauche, développez "Objets Microsoft Office Outlook" et double-cliquez sur "ThisOutlookSession".
  • Coller dans ce code:

    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
    
  • Signez la macro pour qu’elle se lance: Outils> Signature numérique ... et choisissez le certificat que vous avez créé précédemment.

  • Fermer la fenêtre VBA
  • Activer toutes les macros dans Fichier> Options> Centre de gestion de la confidentialité> Paramètres du Centre de gestion de la confidentialité> Paramètres de la macro
Gullu
la source
3
J'ai remarqué que parfois (normalement lorsque vous démarrez Outlook) le premier rappel ne reste pas au top. Une fois que vous avez cliqué sur Rejeter et que vous avez fermé le rappel, tous les rappels suivants restent au premier plan. Je ne sais pas pourquoi.
Gullu
3
La On Error Resume Nextseule s'applique à ce sous-ensemble et empêche simplement la macro entière de planter. Ceci est juste une utilisation standard de VBA.
Jeff Martin
3
J'ai eu le même problème que Gullu a indiqué dans son premier commentaire. Afin de contourner ce problème, je montre une boîte de message pour le premier rappel après le redémarrage de Outlook (ou de mon ordinateur). Private messageAlreadyShown As Boolean Private Sous Application_Reminder (élément ByVal en tant On Error Resume Next qu'objet ) si non messageAlreadyShown, puis MsgBox "First Reminder", vbSystemModal, "" fin si messageAlreadyShown = True ReminderWindow = FindWindowA (vbNullString, "1 Rappel") SetWindowPos ReminderWindow, HWND_TOPMOST, 0, 0, 0, 0, FLAGS End Sub
helios456
3
J'ai eu du mal à trouver l'outil pour créer un cert auto-signé pour la macro. Je l'ai trouvé dans C: \ Program Files \ Microsoft Office \ OfficeXX, l'outil SELFCERT.EXE.
SSZero
3
J'ai changé le mien pour trouver "1 Rappel (s)", puis cela a fonctionné.
Robert Brooker
18

AutoHotKey peut également être utilisé pour résoudre ce problème. Ce script place la fenêtre de rappel au premier plan sans voler le focus (testé avec 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
}

AHK Script - EXE compilé

Eric L
la source
+1 pour utiliser AHK. Je viens de tester ceci dans Win 7 / Outlook 2016. Il apporte la vue au premier plan, mais il ne vole pas vraiment le focus si vous tapez. Exactement ce que je voulais! (Je viens de retirer les embouts du plateau cependant :))
Fawix
1
Notez qu'il existe un moyen très simple de faire démarrer le script par Windows. Il suffit de le mettre sur le dossierC:\Users\<username>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
Fawix
Les liens AHK Script et EXE compilé sont rompus. J'ai copié et collé le script ci-dessus dans mon script AutoHotKey.ahk et cela n'a pas fonctionné.
Mike Cole
1
Voici le fichier EXE compilé drive.google.com/file/d/0B_pJVd8U0PfcWkZWNmhEYncwQjA/view
user664174
1
Vous pouvez facilement accéder au dossier de démarrage en entrant shell:startupdans une barre d’adresse ou dans la boîte de
dialogue
13

La meilleure réponse que j'ai trouvée est la suivante: comment obtenir à nouveau des rappels de rendez-vous Outlook devant d'autres fenêtres à l'aide de simples VBA.

Cela implique d'ajouter quelques lignes de code VBA simple à "ThisOutlookSession". Maintenant, il ouvre une fenêtre à chaque fois. Beaucoup mieux.

  • Créer un certificat numérique pour plus tard
  • Appuyez sur Démarrer et tapez «certificat», sélectionnez «Certificat numérique pour les projets VBA».
  • Entrez un nom pour votre certificat
  • Terminé
  • Ouvrez Outlook et appuyez sur Alt + F11 pour lancer l'éditeur VBA.
  • Dans l'arborescence à gauche, développez "Objets Microsoft Office Outlook" et double-cliquez sur "ThisOutlookSession".
  • Collez ce code en modifiant le texte entre guillemets selon vos préférences. Laissez les citations dans.

    Private Sub Application_Reminder(ByVal Item As Object)
    
    
        If TypeOf Item Is AppointmentItem Then
        MsgBox "Message text", vbSystemModal, "Message title"
        End If
    
    
    End Sub
    
  • Signez la macro pour qu'elle s'exécute en allant dans Outils> Signature numérique… et en choisissant le certificat que vous avez créé précédemment.

  • Fermer la fenêtre VBA
tommykey
la source
Je ai
Utilisé dans le cadre de la solution de Gullu. Merci beaucoup.
Smandoli
Cela fonctionnait sous Outlook 2007, contrairement à Gullu.
Will Sheppard
7

Depuis la version 1803 (février 2018), l'option "Afficher les rappels au-dessus des autres fenêtres" est désormais disponible. Il ne semble pas être activé par défaut.

entrez la description de l'image ici

L'avocat du diable
la source
3
Je n'ai pas encore la version mise à jour, mais c'est génial! Et cela fait seulement 7 ans que j'ai demandé, aussi. (Et c'est une dis à la MS, ainsi qu'un merci à vous.)
jeudi à partir de jeudi
2
C'est une excellente mise à jour d'une vieille question. Notez que ce n'est pas tout à fait la même chose que "toujours au-dessus", mais cela garantit que la fenêtre apparaît en haut de l'ordre z afin que les utilisateurs ne risquent pas de la rater.
Marc LaFleur
6

Il n'y a pas moyen. Notre société a tenté de la transmettre directement à Microsoft. Une chose que les gens font ici est de lui attribuer un son plus odieux, pour aider à le remarquer. Mais Microsoft nous a dit que c'était à dessein.

Brian
la source
11
Je travaille dans une ferme cubique. J'essaie de garder mon ordinateur silencieux pour les autres. :(
thursdaysgeek
3
S'ils étaient vraiment en train de concevoir, ils le feraient de cette façon par défaut, mais ils permettraient de le changer. Ils "dessinent", on apprend à le supporter?
jeudi
Voir ma réponse. Nous avons enfin une solution.
Gullu
J'ai trouvé une solution tierce. Outils réels Actual Window Guard 30 $ (qui est également inclus dans leur produit global englobant Produit réel Windows Manager 50 $) permet d’attribuer des fenêtres toujours au premier plan. De plus, il est facile d'activer et de désactiver la fonctionnalité. (notez que cela fait plus que cela pour aider à rendre le prix plus facile à accepter.) Je les ai trouvés lors de l’essai d’outils de bureau virtuel et d’utilitaires à plusieurs moniteurs. J'utilise ce dernier depuis deux mois et j'en suis très heureux.
Javaru
Je suppose que la solution consiste à utiliser un meilleur outil! Dommage que ce ne soit pas un choix pour moi :(
Jonathan Benn
6

Identique à la réponse de Gullu ci-dessus mais avec modification pour tenir compte du titre de la fenêtre:

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
tbone
la source
Encore mieux serait quelque chose comme Dim olApp As Outlook.Application Set olApp = New Outlook.Application iReminderCount = olApp.Reminders.CountAlors vous pourriez enlever la boucle.
Zusukar
@Zusukar Reminders.Countrenvoie le nombre total de rappels définis dans les rendez-vous et non dans la boîte de dialogue de rappel active. Dans mon système, cela renvoie 22, par exemple.
Geoff
@Zusukar Vous pouvez idéalement utiliser la propriété Reminder.IsVisible pour compter les éléments visibles, mais cela est toujours faux. Cet événement se produit probablement avant que le rappel ne soit marqué comme visible.
Geoff
3

Cela m'ennuyait aussi. Après une recherche intensive, j'ai trouvé une réponse partielle: http://www.pcreview.co.uk/forums/hidden-outlook-reminders-t3972914.html

Si vous modifiez le paramètre «Boutons de la barre des tâches» sous «Propriétés de la barre des tâches et du menu Démarrer» sur «Ne jamais combiner», le regroupement se sépare et le rappel apparaît devant tout ce que vous avez ouvert.

J'ai essayé de le tester et j'ai constaté qu'il était incohérent. Une fois, il est resté caché derrière ce sur quoi je travaillais et une autre fois, il est apparu à l'avant. Dans les deux cas, la barre des tâches contenait une icône différente de celle d’Outlook. Il y avait donc au moins une chance que je le remarque.

Mark Ransom
la source
Impossibilité pour Outlook 2013 de se comporter correctement, même avec Never Combine. Outlook 2013, Windows 7 32 bits.
dim.
Ce n'est pas une bonne solution pour moi, car je préfère que les applications se combinent dans la barre des tâches
Jonathan Benn
3

J'ai utilisé Filebox eXtender et lorsque le premier rappel arrive, je l'ouvre et cliquez sur la nouvelle icône représentant une épingle en haut à droite de la barre de légende. Puis, quand le prochain rappel arrive, il apparaît au premier plan ...

effet jacorb
la source
PinMe! va faire la même chose. C'est un outil portable gratuit qui accomplit extrêmement bien cette tâche. Je l'ai testé dans Outlook 2013 et il fonctionne exactement comme je le souhaite. Outlook au premier plan ou réduit au minimum, le rappel du calendrier apparaît toujours au premier plan.
Dim.
@Sun va donner PinMe! un coup de feu
Chris Marisic
@Sun i Setup "super pin" sur la fenêtre de notification qui devrait vous assurer qu'il est toujours visible, quoi qu'il arrive, jusqu'à ce que je le ferme. Fonctionne comme annoncé immédiatement et répond aux notifications successives. impressionnant.
Chris Marisic
J'ai essayé PinMe et je ne peux absolument pas laisser la fenêtre rester au top !! ??
tbone
1

J'ai trouvé un add-in appelé ShowReminders ( http://www.sagelamp.com/pages/showreminders.aspx ), qui amène la fenêtre des rappels au sommet. Cela fonctionne même lorsque vous réduisez la fenêtre de rappel.

utilisateur245293
la source
3
Dit produit est de 20 $ au octobre 2014
Sun
L'installation a échoué pour moi sous Windows 10:The following package files could not be found: C:\Users\ukeim\AppData\Local\Temp\IXP000.TMP\Office2007PIARedist\o2007pia.msi
Uwe Keim
0

J'ai finalement trouvé une solution simple en utilisant Outlook VBA et un simple EXE.

Voici comment ne jamais rater le rendez-vous de Outlook.

Pourquoi une application exe autonome juste à cette fin? J'avais la grosse boîte rouge intégrée dans la VBA, mais cette solution posait problème (je pense que c’est parce que je dois utiliser hwnd et d’autres propriétés système inhabituelles pour garder la grosse boîte rouge au-dessus). Donc, pour simplifier les choses, pourquoi ne pas créer un EXE simple qui fasse une chose. Vous pouvez utiliser des outils gratuits de Microsoft (Visual Studio Community 2015 est gratuit).

C'est le code EXE. application de formulaire Windows simple avec un formulaire. Compilez ce code.

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

Et c'est tout ce dont j'ai besoin dans la perspective VBA. Mettez ceci dans 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
utilisateur2635566
la source
0

Ceci est une version améliorée de la réponse de tbone qui fonctionne sur les versions allemandes.

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

J'ai ajouté des titres de fenêtre en allemand et quelques nouvelles fonctions ( BringWindowToTop, SetForegroundWindowet SetFocus).

Fonctionne sur mon Windows allemand 10 avec Outlook 2016.

Je n’ai pas réussi à générer un nouveau certificat (appuyer sur Démarrer et entrer «certificat» ne révèle rien), mais j’ai simplement sélectionné un autre certificat dans la liste lors de la signature.

Uwe Keim
la source
cela fait simplement clignoter l’application mais n’affiche pas la fenêtre de notification au premier plan
KIC