Як зробити так, щоб нагадування календаря Outlook залишалися на вершині в Windows 7


123

Я тільки починаю використовувати Windows 7 і хочу знати, як зробити так, щоб мої нагадування Outlook спливали і показували себе на чільному місці. Вони відкриваються непомітно, як лише чергове вікно в стеку Outlook на панелі завдань. Як результат, я продовжую їх не помічати, оскільки вони спливають позаду всього іншого.

Як зробити їх менш легкими для перегляду?

(Зрозуміло, що зазвичай не хочеться неприємних програм, які висувають себе на перший план. Але є кілька місць, де така поведінка бажана, і нагадування календаря Outlook - одне з них.)


16
Це так необхідно. Якщо хтось впадає в інтенсивну концентрацію, дуже легко пропустити нагадування і помітити, що він похований під іншими вікнами лише після того, як ти запізнишся. Це смішно, що це неможливо з деякими простими налаштуваннями. Яке корисне нагадування, якщо ви не отримаєте його негайно ?!
Маріо

Відповіді:


61

У мене була така ж проблема з Outlook 2010. Використовуйте вказані нижче дії, це працює як шарм. Не забудьте включити всі макроси: Центр довіри> Налаштування макросів.

  • Створіть цифровий сертифікат на пізніше: натисніть "Пуск" та введіть "сертифікат", виберіть "Цифровий сертифікат для проектів VBA"
  • Введіть назву вашого сертифіката. Натисніть кнопку ОК. Відкрийте Outlook і натисніть Alt+, F11щоб запустити редактор VBA.
  • У дереві зліва розгорніть «Об’єкти Microsoft Office Outlook» та двічі клацніть на «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
  • Увімкніть усі макроси у файлі> Параметри> Центр довіри> Налаштування центру довіри> Налаштування макросу

3
Я помітив, іноді (як правило, коли ви запускаєте Outlook), перше нагадування не залишатиметься зверху. Після натискання кнопки Відхилити та закрити нагадування всі наступні нагадування залишаються на вершині. Не знаю чому.
Gullu

3
On Error Resume NextВідноситься тільки до цього Sub і просто запобігає весь макрос від збоїв .. Це просто стандартне застосування VBA.
Джефф Мартін

3
У мене був той самий випуск, що і Гуллу вказав у своєму першому коментарі. Щоб вирішити цю проблему, я показую вікно повідомлень для першого нагадування після перезавантаження світогляду (або мого комп'ютера). Private messageAlreadyShown As Boolean Private Sub Application_Reminder (елемент ByVal як об’єкт) On Error Resume Next Якщо не повідомленняAlreadyShown, то закінчується, MsgBox "First Reminder", vbSystemModal, "" якщо messageAlreadyShown = True ReminderWindow = FindWindowA (vbNullString, "1 нагадування") SetWindowPos ReminderWindow, HWND_TOPMOST, 0, 0, 0, 0, FLAGS Кінець Sub
helios456

3
У мене виникли проблеми з пошуком інструменту для створення сертифікованого сертифіката для макроса. Я знайшов це в C: \ Program Files \ Microsoft Office \ OfficeXX, інструменті SELFCERT.EXE.
SSZero

3
Я змінив шахту, щоб знайти "1 нагадування (и)", і тоді це спрацювало.
Роберт Брукер

18

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


+1 за використання AHK. Я щойно перевірив це в програмі win 7 / outlook 2016. Це виводить погляд на передню частину, але насправді це не вкраде фокус, якщо ви набираєте текст. Саме те, що я хотів! (Я щойно видалив поради щодо лотка :))
Fawix,

1
Зауважте, що існує дуже простий спосіб розпочати сценарій із Windows. Просто помістіть його в папкуC:\Users\<username>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
Fawix

Скрипт AHK та компільований EXE порушені. Я скопіював і вставив вище сценарій у свій сценарій AutoHotKey.ahk, і він не працював.
Майк Коул

1
ось складений
файл

1
Дістатися до папки запуску можна легко, ввівши shell:startupв адресний рядок або поле запуску
Gert van den Berg

13

Найкраща відповідь, яку я знайшов, тут: Як отримати нагадування про зустріч Outlook, щоб знову з’являтися перед іншими вікнами, використовуючи просту VBA.

Це тягне за собою додавання декількох рядків простого коду VBA до "ThisOutlookSession". Тепер воно щоразу вискакує вікно. Значно краще.

  • Створіть цифровий сертифікат на потім
  • Натисніть "Пуск" та введіть "сертифікат", виберіть "Цифровий сертифікат для проектів VBA"
  • Введіть назву для вашого сертифіката
  • Зроблено
  • Відкрийте Outlook і натисніть Alt + F11, щоб запустити редактор VBA.
  • У дереві зліва розгорніть «Об’єкти Microsoft Office Outlook» та двічі клацніть на «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

Спробував це в Outlook 2010, Windows 7, але це не спрацювало :(
tekumara

Використовували це як частину рішення Gullu. Велике спасибі
Смандолі

Це працювало на Outlook 2007, тоді як Gullu - ні.
Буде Шеппард

7

Станом на версію 1803 (лютий 2018 року) тепер доступна опція "Показати нагадування поверх інших вікон". Здається, це за умовчанням не ввімкнено.

введіть тут опис зображення


3
У мене ще немає оновленої версії, але це чудово! І минуло лише 7 років, як я запитав. (І це розбрат у MS, а також подяка вам.)
четверг

2
Це відмінне оновлення старого питання. Зауважте, що це не зовсім так, як "завжди вгорі", але це гарантує, що вікно з’являється у верхній частині z-порядку, так що користувачі рідше його пропускають.
Marc LaFleur

6

Немає способу. Наша компанія намагалася передати це безпосередньо в Microsoft. Одне, що люди роблять тут, - це присвоїти йому більш неприємний звук, щоб допомогти його помітити. Але Microsoft сказала нам, що це задумано.


11
Я працюю на кубичній фермі - я намагаюся замовчувати комп’ютер за інших. :(
четверггек

3
Якби вони по-справжньому розробляли дизайн, вони зробили б це за замовчуванням, але дозволили б його змінити. Вони "проектують", ми вчимося миритися з цим?
четверггек

Дивіться мою відповідь. Зрештою, у нас є рішення.
Гуллу

Я знайшов рішення третьої сторони. Фактичні інструменти Фактичний захист вікон 30 доларів США (який також входить до всього їхнього продукту Actual Windows Manager 50 доларів) дозволяє призначити вікна завжди бути на вершині. Плюс його легке вмикання та вимкнення функції. (зауважте, це робить більше, ніж просто це, щоб полегшити прийняття цінника.) Я виявив це, випробовуючи віртуальний робочий стіл та утиліти багатомоніторних програм. Я використовую останній вже пару місяців і дуже задоволений цим.
Джавару

Я думаю, що рішення - використовувати кращий інструмент! До поганого, що це не вибір для мене :(
Джонатан Бенн

6

Те саме, що передня частина Гуллу вище, але зі зміною, щоб вмістити різні назви вікна:

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

Ще краще буде щось на кшталт Dim olApp As Outlook.Application Set olApp = New Outlook.Application iReminderCount = olApp.Reminders.CountТоді ви можете зняти петлю.
Зусукар

@Zusukar Reminders.Countповертає загальну кількість нагадувань, встановлених у зустрічах, а не в діалоговому вікні активного нагадування. У моїй системі, наприклад, це повертається 22.
Джефф

@Zusukar В ідеалі ви могли б використовувати властивість Reminder.IsVisible для підрахунку видимих, але це завжди помилково - імовірно, подія відбувається до того, як нагадування буде позначено як видиме.
Джефф

3

Це мене також клопіло. Після інтенсивного пошуку я знайшов часткову відповідь: http://www.pcreview.co.uk/forums/hidden-outlook-reminders-t3972914.html

Якщо змінити налаштування "Кнопки панелі завдань" у "Властивості панелі завдань і меню" Пуск "на" Ніколи не поєднувати ", то групування відокремлює, а нагадування спливає перед тим, що ви ще відкрили.

Я спробував перевірити це і виявив, що він суперечить; один раз він залишався прихованим за тим, над чим я працював, а в інший раз вискакував спереду. В обох випадках на панелі завдань була піктограма, яка виглядала інакше, ніж сама Outlook, тому, принаймні, був шанс, що я це помітять.


Не могла змусити Outlook 2013 вести себе правильно навіть із Never Combine. Outlook 2013, Windows 7 32-розрядний.
Нд

Це не гарне рішення для мене, тому що я вважаю за краще поєднувати програми на панелі завдань
Джонатан Бенн

3

Я використовував Filebox eXtender, і коли з’являється перше нагадування, я відкриваю його та натискаю на нову пінцетну піктограму праворуч у верхній частині панелі підписів. Потім, коли з'являється наступне нагадування, воно виходить на перший план ...


PinMe! зробимо те саме. Це безкоштовний портативний інструмент і робить це одне завдання надзвичайно добре. Я перевірив його Outlook 2013, і він працює саме так, як я цього хочу. Передній план перспектив або мінімізований, нагадування календаря завжди з’являється на передній план.
Нд

@Sun збирається подарувати PinMe! постріл
Кріс Марісіч

@Sun I setup "super pin" у вікні сповіщень, який повинен переконатися, що воно завжди вічно видно незалежно від того, доки я не відхилю його. Працює так, як рекламується поза коробкою, і вона надходить на послідовні сповіщення. приголомшливий
Кріс Марісіч

Я спробував PinMe і зовсім не можу змусити вікно залишитися на вершині !! ??
tbone

1

Я знайшов доповнення під назвою ShowReminders ( http://www.sagelamp.com/pages/showreminders.aspx ), яке підводить вікно нагадувань до вершини. Він працює навіть тоді, коли ви мінімізуєте вікно нагадування.


3
Каже продукт $ 20 за станом на жовтень 2014 р
нд

У мене не вдалося налаштувати Windows 10:The following package files could not be found: C:\Users\ukeim\AppData\Local\Temp\IXP000.TMP\Office2007PIARedist\o2007pia.msi
Uwe Keim

0

Нарешті я знаходжу просте рішення за допомогою Outlook VBA та простого EXE.

Ось, як ніколи не пропустити зустріч із перспективою.

Чому автономна програма EXE саме для цієї мети? Я мав велике червоне поле вбудоване у VBA, але це рішення було повним проблемою (я вважаю, це тому, що мені потрібно використовувати hwnd та іншу незвичну властивість системи, щоб тримати велике червоне поле зверху). Отже, щоб зробити речі простішими, чому б не базовий EXE, який зробить одне. Ви можете використовувати безкоштовні інструменти від мікрософт (Visual studio Community 2015 безкоштовно).

Це EXE-код. простий віконний додаток з однією формою. Складіть цей код.

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

І це все, що мені потрібно для прогнозу VBA. Помістіть це в 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

Це вдосконалена версія відповіді tbone, яка працює на німецьких версіях.

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

Я додав німецькі заголовки вікон , а також деякі нові функції ( BringWindowToTop, SetForegroundWindowі SetFocus).

Працює на моїй німецькій Windows 10 разом із Outlook 2016.

Я не зумів генерувати новий сертифікат (натискання кнопки «Пуск» та введення «сертифікату» нічого не виявило), а просто вибрав ще один сертифікат у списку при підписанні.


це змушує програму просто моргати, але не показує вікно сповіщень на фронт
KIC
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.