4

Я использую Outlook 2007 в 64-разрядной версии Vista Business, и у меня возникают проблемы с уведомлениями Календаря Outlook, появляющимися за другими окнами. Это оставляет мой единственный признак того, что я должен быть на собрании, что на панели задач есть синяя запись. Я не нашел настройки, которая связана с этим.

Кто-нибудь еще имел эту проблему? Кто-нибудь знает, как последовательно получать окна уведомлений поверх других окон?

2 ответа2

1

Эта бесплатная надстройка может помочь всплывающему окну всплыть так, как вы хотите:http://blogs.kraftkennedy.com/index.php/2010/06/07/getting-outlook-meeting-reminders-in -над - фокус-другие-приложения /

0

Если вы хотите получить ответ в Outlook, то этот пост содержит большую часть ответа. Однако это не сработало, так как окно напоминания не отображается до тех пор, пока не завершится подпрограмма Application_Reminder , что означает, что FindWindowA не может найти окно напоминания.

Если у вас возникла та же проблема, я взломал решение с помощью SetTimer . Я перепишу шаги полностью, хотя верх и хвост - просто повторение от другого поста .

  • Создайте цифровой сертификат на потом. Нажмите «Пуск» и введите «сертификат», выберите «Цифровой сертификат для проектов VBA»
  • Введите имя для вашего сертификата, затем нажмите Готово
  • Откройте Outlook и нажмите ALT + F11, чтобы запустить редактор VBA.
  • В дереве слева разверните «Объекты Microsoft Office Outlook» и дважды щелкните «ThisOutlookSession».
  • Вставьте следующий код в:

Вариант Явный

Private Sub Application_Quit()

    'Выключите таймер при выходе ОЧЕНЬ ВАЖНО
    Вызов DeactivateTimer

End Sub

Private Sub Application_Reminder(элемент ByVal как объект)

    Вызовите вспомогательную функцию через 1 секунду, так как окно напоминания еще не видно
    Если TypeOf Item является AppointmentItem, тогда ActivateTimer (1)

End Sub

  • Добавьте новый модуль, щелкнув правой кнопкой мыши «ThisOutlookSession» и выбрав «Вставка»> «Модуль».
  • В новый модуль (на который вы должны были переключиться) вставьте следующий код:

Вариант Явный

Закрытое Объявление функции PtrSafe FindWindowA Lib "user32" (_
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As Long

Закрытое Объявление функции PtrSafe 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) Как долго

Закрытое Объявление функции PtrSafe SetTimer Lib "user32" (_
    ByVal hwnd As Long, _
    ByVal nIDEvent As Long, _
    ByVal uElapse As Long, _
    ByVal lpTimerfunc As Long) Как долго

Закрытое Объявление функции PtrSafe KillTimer Lib "user32" (_
    ByVal hwnd As Long, _
    ByVal nIDEvent как долго) так долго

Личное Const SWP_NOSIZE = & H1
Личное Const SWP_NOMOVE = & H2
Личные константы FLAGS As Long = SWP_NOMOVE или SWP_NOSIZE
Private Const HWND_TOPMOST = -1

Private TimerID As Long 'Требуется идентификатор таймера, чтобы в конечном итоге отключить таймер. Если идентификатор таймера не равен 0, таймер работает

Public Sub ActivateTimer (ByVal nSeconds As Long)

    'Вызов SetTimer принимает миллисекунды, поэтому конвертируйте в секунды
    nSeconds = nSeconds * 1000

    'Проверьте, работает ли таймер перед вызовом SetTimer
    Если TimerID <> 0, тогда вызовите DeactivateTimer

    TimerID = SetTimer (0, 0, nSeconds, AddressOf Reminder_Helper)

    Если TimerID = 0, то MsgBox "Таймер не активирован".

End Sub

Public Sub DeactivateTimer ()

Dim lSuccess As Long

    Если TimerID <> 0, то
        lSuccess = KillTimer (0, TimerID)
        Если lSuccess = 0, то
            MsgBox "Таймер не удалось отключить."
        еще
            TimerID = 0
        Конец, если
    Конец, если

End Sub

Private Sub Reminder_Helper (ByVal hwnd As Long, ByVal uMsg As Long, ByVal idevent As Long, ByVal Systime As Long)

Dim ReminderWindowHWnd As Variant

    Если idevent = TimerID Тогда

        При ошибке возобновить следующее
        ReminderWindowHWnd = FindWindowA (vbNullString, "1 Reminder")
        SetWindowPos ReminderWindowHWnd, HWND_TOPMOST, 0, 0, 0, 0, ФЛАГИ
        DeactivateTimer

    Конец, если

End Sub

  • Подпишите макрос, чтобы он запустился, перейдя в Инструменты> Цифровая подпись ... и выбрав сертификат, который вы создали ранее.
  • Закройте окно VBA
  • Включите все макросы в меню «Файл»> «Параметры»> «Центр управления безопасностью»> «Настройки центра управления безопасностью»> «Настройки макроса».
  • Закройте и снова откройте Outlook

Я бы разместил это в нижней части другого поста, но он заблокирован для новых пользователей, как я!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .