題 如何使Outlook日曆提醒在Windows 7中保持領先


我剛剛開始使用Windows 7,我想知道如何讓我的Outlook提醒彈出並突出顯示自己。它們會謹慎地打開,就像任務欄上Outlook堆棧中的另一個窗口一樣。結果,我一直在忽視它們,因為它們突然出現在其他一切之後。

如何讓它們不容易被忽視?

(顯然,人們通常不希望討厭的應用程序將自己推向最前沿。但是有一些地方需要這樣的行為,而Outlook日曆提醒就是其中之一。)


112
2018-03-01 21:14


起源


這是非常必要的。如果一個人陷入高度集中,很容易錯過提醒,並且只有在你遲到之後才注意到它被埋在其他窗戶下面。用一些簡單的設置是不可能的,這太荒謬了。如果你沒有迅速得到它,有什麼好處提醒?! - Mario


答案:


我在Outlook 2010中遇到了同樣的問題。使用下面提到的步驟,它就像一個魅力。不要忘記啟用所有宏:信任中心>宏設置。

  • 稍後創建數字證書:點擊開始並輸入 '證書',選擇'VBA項目的數字證書'
  • 輸入證書的名稱。單擊確定。打開Outlook並點擊 Alt鍵 + F11 至 啟動VBA編輯器。
  • 在左側的樹中,展開“Microsoft Office Outlook Objects”並雙擊“ThisOutlookSession”
  • 粘貼此代碼:

    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
    
  • 簽署宏以便它運行:工具>數字簽名...並選擇您之前創建的證書

  • 關閉VBA窗口
  • 在文件>選項>信任中心>信任中心設置>宏設置中啟用所有宏

57
2017-08-16 15:19



我注意到,有時(通常當你啟動Outlook時)第一個提醒將不會保持在最頂層。單擊“關閉”並關閉提醒後,所有後續提醒都將保持在最頂層。不知道為什麼。 - Gullu
該 On Error Resume Next 僅適用於該Sub,只是防止整個宏崩潰..這只是標準的VBA使用。 - Jeff Martin
我和Gullu在他的第一條評論中指出了同樣的問題。為了解決這個問題,我在重新啟動outlook(或我的計算機)後顯示了第一個提醒的消息框。 Private messageAlreadyShown As Boolean Private Sub Application_Reminder(ByVal Item As Object) On Error Resume Next 如果不是messageAlreadyShown那麼 MsgBox "First Reminder", vbSystemModal, "" 萬一 messageAlreadyShown = True ReminderWindow = FindWindowA(vbNullString,“1 Reminder”) SetWindowPos ReminderWindow, HWND_TOPMOST, 0, 0, 0, 0, FLAGS 結束子 - helios456
我找不到為宏創建自簽名證書的工具。我在C:\ Program Files \ Microsoft Office \ OfficeXX中找到了它,工具SELFCERT.EXE。 - SSZero
我改變了我的命令,找到了“1 Reminder(s)”,然後才有效。 - Robert Brooker


AutoHotKey也可用於解決此問題。此腳本將提醒窗口置於頂部而不會竊取焦點(使用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腳本  - 編譯EXE


14
2018-02-02 12:58



+1使用AHK。我剛剛在win 7 / outlook 2016中對此進行了測試。它將視圖帶到前面,但如果您正在打字,它實際上並沒有竊取焦點。正是我想要的! (我剛剛刪除了托盤提示:)) - Fawix
請注意,有一種非常簡單的方法可以讓腳本以windows開頭。把它放在文件夾上 C:\Users\<username>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup - Fawix
AHK腳本和編譯的EXE鏈接已斷開。我將上面的腳本複制並粘貼到我的AutoHotKey.ahk腳本中,但它不起作用。 - Mike Cole
這對我來說就像一個魅力。 AHK是我嘗試的第一件事,但由於某種原因我無法檢測窗戶。謝謝! - Grinn
這是編譯的EXE drive.google.com/file/d/0B_pJVd8U0PfcWkZWNmhEYncwQjA/view - user664174


我發現的最佳答案是: 如何使用一些簡單的VBA再次在其他窗口前彈出Outlook約會提醒。

它需要在“ThisOutlookSession”中添加幾行簡單的VBA代碼。現在,它每次都彈出一個窗口。好多了。

  • 稍後創建數字證書
  • 點擊開始並輸入'證書',選擇'VBA項目的數字證書'
  • 輸入證書的名稱
  • 完成
  • 打開Outlook並按Alt + F11啟動VBA編輯器。
  • 在左側的樹中,展開“Microsoft Office Outlook Objects”並雙擊“ThisOutlookSession”
  • 粘貼此代碼,修改引號中的文字以符合您的偏好。留下引號。

    Private Sub Application_Reminder(ByVal Item As Object)
    
    
        If TypeOf Item Is AppointmentItem Then
        MsgBox "Message text", vbSystemModal, "Message title"
        End If
    
    
    End Sub
    
  • 對宏進行簽名,以便運行工具>數字簽名...並選擇您之前創建的證書

  • 關閉VBA窗口

13
2018-03-13 23:10



在Outlook 2010中試過這個,Windows 7卻沒有用:( - tekumara
用它作為Gullu解決方案的一部分。非常感謝。 - Smandoli
這適用於Outlook 2007,而Gullu則沒有。 - Will Sheppard


沒有辦法。我們公司嘗試直接升級到微軟。人們在這裡做的一件事是給它一個更討厭的聲音,以幫助注意它。但微軟告訴我們這是設計上的。


6
2018-03-01 21:34



我在一個立方體農場工作 - 我試圖讓我的電腦保持安靜。 :( - thursdaysgeek
如果它們是真正的設計,它們默認會這樣做,但允許它被改變。他們“設計”,我們學會忍受它嗎? - thursdaysgeek
看到我的回答。我們終於有了解決方案。 - Gullu
我確實找到了第三方解決方案。實際工具 實際的窗戶衛士 30美元(也包括在他們的全包產品中 實際的Windows Manager $ 50)允許指定窗口始終位於頂部。此外,它還可以輕鬆打開和關閉此功能。 (注意它不僅僅是為了幫助使價格標籤更容易接受。)我在嘗試虛擬桌面和多監視器實用工具時發現了這些。我已經使用後者幾個月了,我很滿意。 - Javaru
我想解決方案是使用更好的工具!對我來說不好的選擇:( - Jonathan Benn


與Gullu的上述相同,但改變以適應不同的窗口標題:

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
2018-02-03 19:29



更好的是類似的東西 Dim olApp As Outlook.Application Set olApp = New Outlook.Application iReminderCount = olApp.Reminders.Count 然後你可以刪除循環。 - Zusukar
@Zusukar Reminders.Count 返回在約會中設置的提醒總數,而不是在活動提醒對話框中。例如,在我的系統中,它返回22。 - Geoff
@Zusukar你可以理想地使用Reminder.IsVisible屬性來計算可見的屬性,但這總是假的 - 可能是事件發生在提醒被標記為可見之前。 - Geoff


從版本1803(2018年2月)開始,“在其他窗口上顯示提醒”選項現在可用。它似乎默認不啟用。

enter image description here


4
2018-06-01 16:58



我還沒有更新版本,但這太棒了!而且,自從我提出要求以來僅僅7年了。 (這是MS的一個版本,也感謝你。) - thursdaysgeek
這是對舊問題的極好更新。請注意,這與“始終在頂部”並不完全相同,但它確實確保窗口在z順序的頂部彈出,因此用戶不太可能錯過它。 - Marc LaFleur


這也困擾著我。經過一番激烈的搜索,我發現了一個部分答案 http://www.pcreview.co.uk/forums/hidden-outlook-reminders-t3972914.html

如果您更改“任務欄按鈕”   在“任務欄和開始”下設置   菜單屬性“至”永不合併,“   然後分組分離和   提醒彈出面前的任何東西   否則你打開了。

我試著測試它,發現它不一致;有一次它隱藏在我正在工作的東西後面,另一次它突然出現在前面。在這兩種情況下,任務欄上都有一個與Outlook本身不同的圖標,所以我至少有機會注意到它。


3
2018-05-10 17:21



即使使用Never Combine,也無法使Outlook 2013正常運行。 Outlook 2013,Windows 7 32位。 - Sun
這對我來說不是一個好的解決方案,因為我更喜歡將應用程序組合在任務欄中 - Jonathan Benn


我用了 Filebox eXtender 當第一個提醒進來時我打開它並點擊標題欄右上角的新“圖釘”圖標。然後當下一個提醒進來時,它出現在前台......


3
2017-12-21 00:26



PinMe! 也會這樣做。它是一個免費的便攜式工具,非常好地完成這一任務。我已經測試了Outlook 2013,它完全按照我的意願運行。 Outlook前景或最小化,日曆提醒始終彈出到前面。 - Sun
@Sun會給PinMe!一槍 - Chris Marisic
@Sun我在通知窗口設置了“超級引腳”,應該確保它始終是永久可見的,無論如何直到我解僱它。按開箱即用的方式工作,並提供連續通知。真棒。 - Chris Marisic
我試過PinMe並且無法讓窗戶保持在最頂層! - tbone