Jak sprawić, aby przypomnienia kalendarza programu Outlook pozostały na topie w systemie Windows 7

123

Właśnie zaczynam korzystać z systemu Windows 7 i chcę wiedzieć, jak sprawić, by moje przypomnienia programu Outlook pojawiały się i były widoczne. Otwierają się dyskretnie, jako kolejne okno w stosie programu Outlook na pasku zadań. W rezultacie przeoczam je, ponieważ wyskakują za wszystko inne.

Jak sprawić, by były łatwiejsze do przeoczenia?

(Oczywiście, zwykle nie chce się nieprzyjemnych aplikacji, które pchają się na czoło. Ale jest kilka miejsc, w których takie zachowanie jest pożądane, a przypomnienia kalendarza programu Outlook są jednym z nich.)

czwartek
źródło
16
Jest to konieczne. Jeśli ktoś wpada w intensywną koncentrację, bardzo łatwo przeoczyć przypomnienie i zauważyć, że jest pochowany pod innymi oknami dopiero po spóźnieniu. To niedorzeczne, że nie jest to możliwe w przypadku niektórych prostych ustawień. Co dobrego ma przypomnienie, jeśli nie otrzymasz go szybko ?!
Mario,

Odpowiedzi:

61

Miałem ten sam problem z programem Outlook 2010. Wykonaj czynności wymienione poniżej, działa jak urok. Nie zapomnij włączyć wszystkich makr: Centrum zaufania> Ustawienia makr.

  • Utwórz certyfikat cyfrowy na później: kliknij Start i wpisz „certyfikat”, wybierz „Certyfikat cyfrowy dla projektów VBA”
  • Wpisz nazwę swojego certyfikatu. Kliknij OK. Otwórz program Outlook i naciśnij Alt+, F11aby uruchomić edytor VBA.
  • W drzewie po lewej rozwiń „Obiekty Microsoft Office Outlook” i dwukrotnie kliknij „ThisOutlookSession”
  • Wklej ten kod:

    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
    
  • Podpisz makro, aby uruchomiło się: Narzędzia> Podpis cyfrowy ... i wybierz wcześniej utworzony certyfikat

  • Zamknij okno VBA
  • Włącz wszystkie makra w Plik> Opcje> Centrum zaufania> Ustawienia Centrum zaufania> Ustawienia makr
Gullu
źródło
3
zauważyłem, że czasami (zwykle po uruchomieniu programu Outlook) pierwsze przypomnienie nie pozostanie na górze. Po kliknięciu Odrzuć i zamknięciu przypomnienia wszystkie kolejne przypomnienia pozostają na wierzchu. Nie wiem dlaczego.
Gullu,
3
On Error Resume NextTylko zastosowanie do tej Sub i tylko zapobiega całe makro z upaść .. To tylko standardowe wykorzystanie VBA.
Jeff Martin,
3
Miałem ten sam problem, co Gullu wskazał w swoim pierwszym komentarzu. Aby obejść ten problem, po ponownym uruchomieniu programu Outlook (lub mojego komputera) wyświetlam okno komunikatu z pierwszym przypomnieniem. Private messageAlreadyShown As Boolean Private Sub Application_Reminder (element ByVal jako obiekt), On Error Resume Next jeśli nie wiadomość, komunikat już wyświetlany, a następnie MsgBox "First Reminder", vbSystemModal, "" koniec, jeśli messageAlreadyShown = True ReminderWindow = FindWindowA (vbNullString, „1 przypomnienie”) SetWindowPos ReminderWindow, HWND_TOPMOST, 0, 0, 0, 0, FLAGS End Sub
helios456
3
Miałem problem ze znalezieniem narzędzia do utworzenia samopodpisanego certyfikatu dla makra. Znalazłem go w C: \ Program Files \ Microsoft Office \ OfficeXX, narzędzie SELFCERT.EXE.
SSZero
3
Zmieniłem mój, by znaleźć „1 przypomnienie”, a potem zadziałało.
Robert Brooker
18

AutoHotKey może być również wykorzystany do rozwiązania tego problemu. Ten skrypt umieści okno przypomnienia na górze bez kradzieży fokusu (testowane z 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
}

Skrypt AHK - skompilowany plik EXE

Eric L.
źródło
+1 za korzystanie z AHK. Właśnie przetestowałem to w Win 7 / Outlook 2016. To pokazuje widok na przód, ale tak naprawdę nie kradnie ostrości, jeśli piszesz. Dokładnie to, czego chciałem! (Właśnie usunąłem końcówki tacy :))
Fawix
1
Zauważ, że jest bardzo łatwy sposób, aby skrypt zaczął się od systemu Windows. Wystarczy umieścić go w folderzeC:\Users\<username>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
Fawix
Łącza skryptu AHK i skompilowanego pliku EXE są uszkodzone. Skopiowałem i wkleiłem powyższy skrypt do skryptu AutoHotKey.ahk i nie działał.
Mike Cole
1
tutaj jest skompilowany
plik
1
Dostanie się do folderu startowego można łatwo zrobić, wpisując shell:startuppasek adresu lub pole uruchamiania
Gert van den Berg
13

Najlepsza odpowiedź, którą znalazłem, jest tutaj: jak sprawić, by przypomnienia o spotkaniu programu Outlook pojawiały się ponownie przed innymi oknami za pomocą prostego VBA.

Wymaga to dodania kilku wierszy prostego kodu VBA do „ThisOutlookSession”. Teraz za każdym razem wyskakuje okno. Dużo lepiej.

  • Utwórz certyfikat cyfrowy na później
  • Kliknij Start i wpisz „certyfikat”, wybierz „Certyfikat cyfrowy dla projektów VBA”
  • Wpisz nazwę swojego certyfikatu
  • Gotowy
  • Otwórz program Outlook i naciśnij klawisze Alt + F11, aby uruchomić edytor VBA.
  • W drzewie po lewej rozwiń „Obiekty Microsoft Office Outlook” i dwukrotnie kliknij „ThisOutlookSession”
  • Wklej ten kod, modyfikując tekst w cudzysłowach zgodnie z własnymi preferencjami. Zostaw cytaty w.

    Private Sub Application_Reminder(ByVal Item As Object)
    
    
        If TypeOf Item Is AppointmentItem Then
        MsgBox "Message text", vbSystemModal, "Message title"
        End If
    
    
    End Sub
    
  • Podpisz makro, aby działało, przechodząc do Narzędzia> Podpis cyfrowy… i wybierając wcześniej utworzony certyfikat

  • Zamknij okno VBA
Tommykey
źródło
Próbowałem tego w programie Outlook 2010, Windows 7, ale to nie działało :(
tekumara
Wykorzystano to jako część rozwiązania Gullu. Dzięki wielkie.
Smandoli
Działa to w programie Outlook 2007, podczas gdy Gullu nie.
Will Sheppard
6

Nie ma mowy. Nasza firma próbowała przekazać ją bezpośrednio do Microsoft. Jedną rzeczą, którą ludzie tutaj robią, jest przypisanie mu bardziej nieznośnego dźwięku, aby to zauważyć. Ale Microsoft powiedział nam, że jest to zgodne z projektem.

Brian
źródło
11
Pracuję na farmie kostek - staram się zachować spokój komputera dla innych. :(
czwartki
3
Gdyby naprawdę projektowali, domyślnie zrobiliby to w ten sposób, ale pozwolili na zmianę. „Projektują”, uczymy się to znosić?
czwartki
Zobacz moją odpowiedź. W końcu mamy rozwiązanie.
Gullu,
Znalazłem rozwiązanie innej firmy. Rzeczywiste narzędzia Rzeczywista ochrona okna 30 USD (która jest również zawarta we wszystkich obejmujących ją produktach Actual Windows Manager 50 USD) pozwala przypisywać okna tak, aby zawsze były na górze. Ponadto łatwo jest włączać i wyłączać tę funkcję. (zauważ, że robi to więcej niż tylko po to, aby ułatwić akceptację ceny). Znalazłem je podczas wypróbowywania narzędzi do wirtualnego pulpitu i wielu monitorów. Używam tego ostatniego od kilku miesięcy i jestem z tego bardzo zadowolony.
Javaru
Myślę, że rozwiązaniem jest użycie lepszego narzędzia! Szkoda, że ​​nie jest to dla mnie wybór :(
Jonathan Benn
6

To samo co powyżej odpowiedź Gullu, ale ze zmianą w celu dostosowania do innego tytułu okna:

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
źródło
Jeszcze lepiej byłoby coś takiego. Dim olApp As Outlook.Application Set olApp = New Outlook.Application iReminderCount = olApp.Reminders.CountNastępnie możesz usunąć pętlę.
Zusukar,
@Zusukar Reminders.Countzwraca całkowitą liczbę przypomnień ustawionych w spotkaniach, a nie w aktywnym oknie przypominania W moim systemie zwraca to na przykład 22.
Geoff,
@Zusukar Idealnie możesz użyć właściwości Reminder.IsVisible do zliczenia widocznych, ale zawsze jest to fałsz - przypuszczalnie zdarzenie dzieje się zanim przypomnienie zostanie oznaczone jako widoczne.
Geoff
6

Od wersji 1803 (luty 2018 r.) Dostępna jest teraz opcja „Pokaż przypomnienia nad innymi oknami”. Nie wydaje się być domyślnie włączony.

wprowadź opis zdjęcia tutaj

Adwokat diabła
źródło
3
Nie mam jeszcze zaktualizowanej wersji, ale to świetnie! I minęło tylko 7 lat, odkąd też o to poprosiłem. (I to jest dis w stwardnieniu rozsianym, a także podziękowania dla ciebie.)
Czwartek
2
To doskonała aktualizacja starego pytania. Pamiętaj, że nie jest to dokładnie to samo, co „zawsze na wierzchu”, ale zapewnia, że ​​okno wyskakuje u góry kolejności Z, dzięki czemu użytkownicy są mniej skłonni do przegapienia go.
Marc LaFleur,
3

To mnie też wkurzyło. Po intensywnych poszukiwaniach znalazłem częściową odpowiedź: http://www.pcreview.co.uk/forums/hidden-outlook-reminders-t3972914.html

Jeśli zmienisz ustawienie „Przyciski paska zadań” w „Właściwości paska zadań i menu Start” na „Nigdy nie łącz”, wówczas grupa zostanie oddzielona, ​​a przypomnienie pojawi się przed wszystkim, co masz otwarte.

Próbowałem to przetestować i okazało się, że było niespójne; pewnego razu ukrył się za tym, nad czym pracowałem, a innym razem wyskoczył z przodu. W obu przypadkach na pasku zadań znajdowała się ikona, która wyglądała inaczej niż sam Outlook, więc była szansa, że ​​ją zauważę.

Mark Ransom
źródło
Nie udało się sprawić, aby program Outlook 2013 działał poprawnie, nawet w przypadku Never Combine. Outlook 2013, Windows 7 32-bit.
niedz.
To nie jest dla mnie dobre rozwiązanie, ponieważ wolę, aby aplikacje łączyły się na pasku zadań
Jonathan Benn
3

Użyłem Filebox eXtender i kiedy pojawia się pierwsze przypomnienie, otwieram je i klikam nową ikonę „pinezki” w prawym górnym rogu paska napisów. Następnie, gdy pojawi się następne przypomnienie, pojawi się na pierwszym planie ...

efekt jacorb
źródło
Oznacz mnie! zrobi to samo. Jest to bezpłatne, przenośne narzędzie i wykonuje to jedno zadanie wyjątkowo dobrze. Przetestowałem to Outlook 2013 i działa dokładnie tak, jak chcę. Perspektywy programu Outlook lub zminimalizowane, przypomnienie kalendarza zawsze pojawia się na pierwszym planie.
niedz.
@Sun zamierzasz dać PinMe! strzał
Chris Marisic
@Sun ustawiam „super pin” w oknie powiadomień, które powinny być zawsze widoczne bez względu na wszystko, dopóki go nie odrzucę. Działa zgodnie z reklamą po wyjęciu z pudełka i zapewnia kolejne powiadomienia. niesamowite.
Chris Marisic
Próbowałem PinMe i nie mogę uzyskać okna, aby utrzymać się na górze !!
tbone
1

Znalazłem dodatek o nazwie ShowReminders ( http://www.sagelamp.com/pages/showreminders.aspx ), który przenosi okno przypomnień na górę. Działa nawet po zminimalizowaniu okna przypomnienia.

użytkownik245293
źródło
3
Mówi, że produkt kosztuje 20 USD na październik 2014 r.
Nd
Instalacja kończy się niepowodzeniem w systemie Windows 10:The following package files could not be found: C:\Users\ukeim\AppData\Local\Temp\IXP000.TMP\Office2007PIARedist\o2007pia.msi
Uwe Keim
0

W końcu znajduję proste rozwiązanie za pomocą programu Outlook VBA i prostego pliku EXE.

Oto, jak nigdy więcej nie przegapić spotkania z programem Outlook.

Dlaczego samodzielna aplikacja exe tylko w tym celu? Cóż, miałem dużą czerwoną skrzynkę osadzoną w VBA, ale to rozwiązanie było pełne problemu (wierzę, że dzieje się tak, ponieważ muszę użyć hwnd i innych niezwykłych właściwości systemowych, aby utrzymać dużą czerwoną skrzynkę na wierzchu). Tak więc, aby uprościć sprawę, dlaczego nie podstawowy plik EXE, który robi jedną rzecz. Możesz korzystać z bezpłatnych narzędzi firmy Microsoft (Visual Studio Community 2015 jest bezpłatny).

To jest kod EXE. prosta aplikacja formularza systemu Windows z jednym formularzem. Skompiluj ten kod.

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

I to wszystko, czego potrzebuję w Outlook VBA. Umieść to w 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
użytkownik2635566
źródło
0

To jest ulepszona wersja odpowiedzi tbone, która działa na wersjach niemieckich.

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

Dodałem niemieckie tytuły okien, a także kilka nowych funkcji ( BringWindowToTop, SetForegroundWindowi SetFocus).

Działa na moim niemieckim systemie Windows 10 wraz z programem Outlook 2016.

Nie udało mi się wygenerować nowego certyfikatu (naciśnięcie Start i wpisanie „certyfikat” niczego nie ujawniło), ale po prostu wybrałem inny certyfikat z listy podczas podpisywania.

Uwe Keim
źródło
powoduje to, że aplikacja po prostu miga, ale nie wyświetla okna powiadomień z przodu
KIC