Cara membuat pengingat Kalender Outlook tetap teratas di Windows 7

123

Saya baru mulai menggunakan Windows 7 dan saya ingin tahu cara membuat pengingat Outlook saya muncul dan menunjukkan diri mereka dengan jelas. Mereka terus membuka secara diam-diam, hanya sebagai jendela lain di tumpukan Outlook di taskbar. Akibatnya, saya terus mengabaikan mereka karena mereka muncul di belakang segalanya.

Bagaimana saya membuatnya lebih mudah untuk diabaikan?

(Jelas, orang biasanya tidak ingin aplikasi yang menjengkelkan yang mendorong diri mereka ke garis depan. Tetapi ada beberapa tempat di mana perilaku seperti itu diinginkan, dan pengingat kalender Outlook adalah salah satunya.)

thursdaysgeek
sumber
16
Ini sangat perlu. Jika seseorang jatuh ke dalam konsentrasi yang intens, sangat mudah untuk melewatkan pengingat dan melihatnya terkubur di bawah jendela lain hanya setelah Anda terlambat. Ini konyol bahwa tidak mungkin dengan pengaturan sederhana. Apa gunanya pengingat jika Anda tidak segera mendapatkannya ?!
Mario

Jawaban:

61

Saya memiliki masalah yang sama dengan Outlook 2010. Gunakan langkah-langkah yang disebutkan di bawah, ini berfungsi seperti pesona. Jangan lupa untuk mengaktifkan semua makro: Pusat Kepercayaan> Pengaturan Makro.

  • Buat sertifikat Digital untuk nanti: Tekan Mulai dan ketik 'sertifikat', pilih 'Sertifikat Digital untuk Proyek VBA'
  • Masukkan nama untuk sertifikat Anda. Klik OK. Buka Outlook dan tekan Alt+ F11untuk memulai editor VBA.
  • Di pohon di sebelah kiri, rentangkan 'Microsoft Office Outlook Objects' dan klik dua kali pada 'ThisOutlookSession'
  • Rekatkan dalam kode ini:

    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
    
  • Tanda tangani Makro sehingga akan berjalan: Alat> Tanda Tangan Digital ... dan pilih sertifikat yang Anda buat sebelumnya

  • Tutup jendela VBA
  • Aktifkan semua makro di File> Opsi> Pusat Kepercayaan> Pengaturan Pusat Kepercayaan> Pengaturan Makro
Gullu
sumber
3
saya perhatikan, kadang-kadang (biasanya ketika Anda memulai Outlook) pengingat pertama tidak akan tetap di atas. Setelah Anda mengklik Singkirkan dan tutup pengingat, semua pengingat berikutnya tetap di atas. Tidak tahu kenapa.
Gullu
3
Satu- On Error Resume Nextsatunya berlaku untuk Sub itu dan hanya mencegah seluruh makro dari crash .. Ini hanya penggunaan VBA standar.
Jeff Martin
3
Saya memiliki masalah yang sama dengan yang ditunjukkan Gullu dalam komentar pertamanya. Untuk mengatasinya, saya menampilkan kotak pesan untuk pengingat pertama setelah memulai kembali pandangan (atau komputer saya). Private messageAlreadyShown As Boolean Sub Aplikasi Pribadi_Reminder (Item ByVal Sebagai Objek) On Error Resume Next Jika Bukan messageAlreadyShown Lalu MsgBox "First Reminder", vbSystemModal, "" Akhiri Jika messageAlreadyShown = True ReminderWindow = FindWindowA (vbNullString, "1 Reminder") SetWindowPos ReminderWindow, HWND_TOPMOST, 0, 0, 0, 0, FLAGS End Sub
helios456
3
Saya mengalami kesulitan menemukan alat untuk membuat sertifikat yang ditandatangani sendiri untuk makro. Saya menemukannya di C: \ Program Files \ Microsoft Office \ OfficeXX, alat SELFCERT.EXE.
SSZero
3
Saya mengubah milik saya untuk menemukan "1 Pengingat" dan kemudian berhasil.
Robert Brooker
18

AutoHotKey juga dapat digunakan untuk menyelesaikan ini. Script ini akan menempatkan jendela pengingat di atas tanpa mencuri fokus (diuji dengan 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 - Kompilasi EXE

Eric L.
sumber
+1 untuk menggunakan AHK. Saya baru saja menguji ini di win 7 / outlook 2016. Ini membawa pandangan ke depan tetapi sebenarnya tidak mencuri fokus jika Anda mengetik. Tepat seperti yang saya inginkan! (Saya baru saja menghapus tips nampan :))
Fawix
1
Perhatikan bahwa ada cara yang sangat mudah untuk memulai skrip dengan windows. C:\Users\<username>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
Masukkan
Tautan AHK Script dan EXE Terkompilasi rusak. Saya menyalin dan menempelkan skrip di atas ke skrip AutoHotKey.ahk saya dan tidak berfungsi.
Mike Cole
1
di sini adalah dikompilasi EXE drive.google.com/file/d/0B_pJVd8U0PfcWkZWNmhEYncwQjA/view
user664174
1
Mendapatkan ke folder startup dapat dengan mudah dilakukan dengan masuk shell:startupke bilah alamat atau kotak jalankan
Gert van den Berg
13

Jawaban terbaik yang saya temukan ada di sini: Cara mendapatkan pengingat janji temu Outlook untuk muncul di depan jendela lain lagi menggunakan beberapa VBA sederhana.

Ini mencakup penambahan beberapa baris kode VBA sederhana ke "ThisOutlookSession". Sekarang, muncul jendela setiap saat. Jauh lebih baik.

  • Buat sertifikat Digital untuk nanti
  • Tekan Mulai dan ketik 'sertifikat', pilih 'Sertifikat Digital untuk Proyek VBA'
  • Masukkan nama untuk sertifikat Anda
  • Selesai
  • Buka Outlook dan tekan Alt + F11 untuk memulai editor VBA.
  • Di pohon di sebelah kiri, rentangkan 'Microsoft Office Outlook Objects' dan klik dua kali pada 'ThisOutlookSession'
  • Rekatkan dalam kode ini, modifikasi teks dalam tanda kutip yang sesuai dengan preferensi Anda. Biarkan tanda kutip masuk

    Private Sub Application_Reminder(ByVal Item As Object)
    
    
        If TypeOf Item Is AppointmentItem Then
        MsgBox "Message text", vbSystemModal, "Message title"
        End If
    
    
    End Sub
    
  • Masuk Macro sehingga akan berjalan dengan masuk ke Alat> Tanda Tangan Digital ... dan memilih sertifikat yang Anda buat sebelumnya

  • Tutup jendela VBA
tommykey
sumber
Mencoba ini di Outlook 2010, Windows 7 tetapi tidak berhasil :(
tekumara
Menggunakan ini sebagai bagian dari solusi Gullu. Terimakasih banyak.
Smandoli
Ini berfungsi pada Outlook 2007, sedangkan Gullu tidak.
Will Sheppard
7

Pada Versi 1803 (Februari 2018), opsi "Tampilkan pengingat di atas jendela lain" sekarang tersedia. Tampaknya tidak diaktifkan secara default.

masukkan deskripsi gambar di sini

Pengacara Setan
sumber
3
Saya belum memiliki versi yang diperbarui, tetapi ini hebat! Dan baru 7 tahun sejak saya bertanya juga. (Dan itu adalah gangguan pada MS, serta terima kasih kepada Anda.)
thursdaysgeek
2
Ini adalah pembaruan yang sangat baik untuk pertanyaan lama. Perhatikan bahwa ini tidak persis sama dengan "selalu di atas", tetapi itu memastikan jendela muncul di bagian atas z-order sehingga pengguna cenderung melewatkannya.
Marc LaFleur
6

Tidak ada jalan. Perusahaan kami mencoba meningkatkannya ke Microsoft secara langsung. Satu hal yang dilakukan orang di sini adalah memberinya suara yang lebih menjengkelkan, untuk membantu menyadarinya. Tetapi Microsoft telah memberitahu kami bahwa itu adalah desain.

Brian
sumber
11
Saya bekerja di sebuah peternakan kubus - saya mencoba menjaga komputer saya diam untuk orang lain. :(
thursdaysgeek
3
Jika mereka benar-benar mendesain, mereka akan membuatnya seperti itu secara default, tetapi membiarkannya diubah. Mereka "desain", kita belajar untuk bertahan dengan itu?
thursdaysgeek
Lihat jawaban saya. Kami akhirnya punya solusi.
Gullu
Saya memang menemukan solusi pihak ketiga. Alat Aktual Pelindung Jendela Aktual $ 30 (yang juga termasuk dalam semua produk mereka yang mencakup Windows Manager $ 50) memungkinkan untuk menetapkan jendela selalu di atas. Plus mudah untuk menghidupkan dan mematikan fitur. (perhatikan itu tidak lebih dari itu untuk membantu membuat label harga lebih mudah diterima.) Saya menemukan ini ketika mencoba alat virtual desktop & multi-monitor utility. Saya telah menggunakan yang terakhir selama beberapa bulan sekarang dan saya sangat senang dengannya.
Javaru
Saya kira solusinya adalah menggunakan alat yang lebih baik! Buruknya itu bukan pilihan bagi saya :(
Jonathan Benn
6

Sama seperti jawaban Gullu di atas tetapi dengan perubahan untuk mengakomodasi judul jendela yang berbeda:

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
tulang T
sumber
Bahkan lebih baik akan seperti Dim olApp As Outlook.Application Set olApp = New Outlook.Application iReminderCount = olApp.Reminders.CountKemudian Anda bisa menghapus loop.
Zusukar
@Zusukar Reminders.Countmengembalikan jumlah total pengingat yang ditetapkan dalam janji, bukan dalam dialog pengingat aktif Di sistem saya ini mengembalikan 22, misalnya.
Geoff
@Zusukar Anda idealnya dapat menggunakan properti Reminder.IsVisible untuk menghitung yang terlihat, tetapi ini selalu salah - mungkin peristiwa terjadi sebelum pengingat ditandai sebagai terlihat.
Geoff
3

Ini menggangguku juga. Setelah beberapa pencarian intens saya menemukan jawaban parsial: http://www.pcreview.co.uk/forums/hidden-outlook-reminders-t3972914.html

Jika Anda mengubah pengaturan "Tombol-tombol Taskbar" di bawah "Taskbar dan Start Menu Properties" menjadi "Never menggabungkan," maka pengelompokan memisahkan dan pengingat muncul di depan apa pun yang Anda buka.

Saya mencoba mengujinya dan ternyata tidak konsisten; satu kali itu tetap tersembunyi di balik apa yang saya kerjakan, dan lain kali muncul di depan. Dalam kedua kasus ada ikon di bilah tugas yang tampak berbeda dari Outlook itu sendiri, jadi setidaknya ada kemungkinan saya akan melihatnya.

Mark tebusan
sumber
Outlook 2013 tidak bisa berperilaku dengan benar bahkan dengan Never Combine. Outlook 2013, Windows 7 32-bit.
Minggu
Ini bukan solusi yang baik untuk saya, karena saya lebih suka menggabungkan aplikasi di taskbar
Jonathan Benn
3

Saya menggunakan Filebox eXtender dan ketika pengingat pertama datang saya membukanya dan klik ikon 'pin' baru di kanan atas bilah keterangan. Kemudian ketika pengingat berikutnya datang, itu datang di latar depan ...

efek jacorb
sumber
PinMe! akan melakukan hal yang sama. Ini adalah alat portabel gratis dan melakukan tugas yang satu ini dengan sangat baik. Saya sudah mengujinya Outlook 2013 dan berfungsi persis seperti yang saya inginkan. Outlook foreground atau diminimalkan, pengingat kalender selalu muncul ke depan.
Minggu
@Sun akan memberi PinMe! satu tembakan
Chris Marisic
@Sun saya setup "super pin" pada jendela notifikasi yang harus memastikan itu selalu terlihat tidak peduli apa pun sampai saya mengabaikannya. Berfungsi seperti yang diiklankan di luar kotak, dan memberikan pemberitahuan berturut-turut. luar biasa.
Chris Marisic
Saya mencoba PinMe dan tidak bisa mendapatkan jendela untuk tetap di atas, sama sekali !! ??
tulang
1

Saya menemukan addin yang disebut ShowReminders ( http://www.sagelamp.com/pages/showreminders.aspx ), yang membawa jendela pengingat ke atas. Ia bahkan berfungsi saat Anda memperkecil jendela pengingat.

pengguna245293
sumber
3
Dikatakan produk adalah $ 20 pada Oktober 2014.
Sun
Penyetelan gagal untuk saya di Windows 10:The following package files could not be found: C:\Users\ukeim\AppData\Local\Temp\IXP000.TMP\Office2007PIARedist\o2007pia.msi
Uwe Keim
0

Saya akhirnya menemukan solusi sederhana menggunakan Outlook VBA dan EXE sederhana.

Inilah cara untuk tidak pernah melewatkan janji temu pertemuan prospek lagi.

Mengapa aplikasi exe yang berdiri sendiri hanya untuk tujuan ini? Yah saya memiliki kotak merah besar yang tertanam di VBA, tapi solusi itu penuh masalah (saya percaya itu karena saya harus menggunakan hwnd dan properti sistem tidak biasa lainnya untuk menjaga kotak merah besar di atas). Jadi untuk membuatnya lebih sederhana, mengapa tidak EXE dasar yang melakukan satu hal. Anda dapat menggunakan alat gratis dari microsoft (Visual studio Community 2015 gratis).

Ini adalah kode EXE. aplikasi windows form sederhana dengan satu form. Kompilasi kode ini.

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

Dan ini semua yang saya butuhkan dalam VBA prospek. Letakkan ini di 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
pengguna2635566
sumber
0

Ini adalah versi lanjutan dari jawaban tbone yang berfungsi pada versi Jerman.

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

Saya telah menambahkan judul jendela Jerman dan juga beberapa fungsi baru ( BringWindowToTop, SetForegroundWindowdan SetFocus).

Bekerja pada Windows 10 Jerman saya bersama Outlook 2016.

Saya tidak berhasil membuat sertifikat baru (menekan Mulai dan memasukkan "sertifikat" tidak mengungkapkan apa-apa), tetapi cukup memilih sertifikat lain dalam daftar saat masuk.

Uwe Keim
sumber
ini membuat aplikasi hanya berkedip tetapi tidak membawa jendela notifikasi ke depan
KIC