Cách đặt lời nhắc Lịch Outlook luôn đứng đầu trong Windows 7


123

Tôi mới bắt đầu sử dụng Windows 7 và tôi muốn biết cách làm cho lời nhắc Outlook của mình bật lên và hiển thị nổi bật. Họ tiếp tục mở kín đáo, như một cửa sổ khác trong ngăn xếp Outlook trên thanh tác vụ. Kết quả là, tôi tiếp tục nhìn họ vì họ bật lên đằng sau mọi thứ khác.

Làm thế nào để tôi làm cho chúng ít dễ bỏ qua?

(Rõ ràng, người ta thường không muốn các ứng dụng đáng ghét tự đẩy mình lên hàng đầu. Nhưng có một vài nơi mà hành vi đó là mong muốn và nhắc nhở lịch Outlook là một trong số đó.)


16
Điều này là rất cần thiết. Nếu một người rơi vào tình trạng tập trung cao độ, rất dễ bỏ lỡ một lời nhắc và nhận thấy nó bị chôn vùi dưới các cửa sổ khác chỉ sau khi bạn đến muộn. Thật nực cười khi điều đó không thể xảy ra với một số thiết lập đơn giản. Lời nhắc nào tốt nếu bạn không nhận được kịp thời?!
Mario

Câu trả lời:


61

Tôi gặp vấn đề tương tự với Outlook 2010. Sử dụng các bước được đề cập dưới đây, nó hoạt động như một cơ duyên. Đừng quên bật tất cả các macro: Trung tâm tin cậy> Cài đặt macro.

  • Tạo chứng chỉ Kỹ thuật số cho lần sau: Nhấn Bắt đầu và nhập 'chứng chỉ', chọn 'Chứng chỉ kỹ thuật số cho các dự án VBA'
  • Nhập tên cho chứng chỉ của bạn. Nhấn OK. Mở Outlook và nhấn Alt+ F11để khởi động trình soạn thảo VBA.
  • Trong cây bên trái, mở rộng 'Đối tượng Microsoft Office Outlook' và nhấp đúp vào 'ThisOutlookSession'
  • Dán vào mã này:

    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
    
  • Ký Macro để nó chạy: Công cụ> Chữ ký số ... và chọn chứng chỉ bạn đã tạo trước đó

  • Đóng cửa sổ VBA
  • Bật tất cả các macro trong Tệp> Tùy chọn> Trung tâm tin cậy> Cài đặt trung tâm tin cậy> Cài đặt macro

3
tôi nhận thấy, đôi khi (thông thường khi bạn khởi động Outlook), lời nhắc đầu tiên sẽ không ở trên đầu. Khi bạn nhấp vào Loại bỏ và đóng lời nhắc, tất cả các lời nhắc tiếp theo sẽ ở trên đầu. Không biết tại sao.
Gullu

3
Các On Error Resume Nextchỉ áp dụng cho Sub đó và chỉ ngăn chặn toàn bộ vĩ mô từ đâm .. Đây là cách sử dụng VBA chỉ tiêu chuẩn.
Jeff Martin

3
Tôi đã có vấn đề tương tự như Gullu đã chỉ ra trong bình luận đầu tiên của mình. Để giải quyết vấn đề đó, tôi hiển thị hộp thông báo cho lời nhắc đầu tiên sau khi khởi động lại triển vọng (hoặc máy tính của tôi). Private messageAlreadyShown As Boolean Private Sub Application_Reminder (ByVal mục Như Object) On Error Resume Next Nếu Không messageAlreadyShown Rồi MsgBox "First Reminder", vbSystemModal, "" End If messageAlreadyShown = True ReminderWindow = FindWindowA (vbNullString, "1 lời nhắc") SetWindowPos ReminderWindow, HWND_TOPMOST, 0, 0, 0, 0, FLAGS End Sub
helios456

3
Tôi gặp khó khăn khi tìm công cụ để tạo chứng chỉ tự ký cho macro. Tôi đã tìm thấy nó trong C: \ Program Files \ Microsoft Office \ OfficeXX, công cụ SELFCERT.EXE.
SSZero

3
Tôi đã thay đổi của tôi để tìm "1 Reminder (s)" và sau đó nó hoạt động.
Robert Brooker

18

AutoHotKey cũng có thể được sử dụng để giải quyết điều này. Tập lệnh này sẽ đặt cửa sổ nhắc nhở lên hàng đầu mà không lấy cắp tiêu điểm (được thử nghiệm với 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
}

Tập lệnh AHK - Biên dịch EXE


+1 để sử dụng AHK. Tôi vừa thử nghiệm điều này trong win 7 / triển vọng 2016. Nó đưa tầm nhìn ra phía trước nhưng nó không thực sự đánh cắp trọng tâm nếu bạn đang gõ. Chính xác những gì tôi muốn! (Tôi chỉ xóa các mẹo trên khay :))
Fawix

1
Lưu ý rằng có một cách rất dễ dàng để bắt đầu tập lệnh với windows. Chỉ cần đặt nó vào thư mụcC:\Users\<username>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
Fawix

Các liên kết AHK Script và biên dịch EXE bị hỏng. Tôi đã sao chép và dán tập lệnh ở trên vào tập lệnh AutoHotKey.ahk và nó không hoạt động.
Mike Cole


1
Có thể dễ dàng truy cập shell:startupvào thư mục khởi động bằng cách nhập vào thanh địa chỉ hoặc hộp chạy
Gert van den Berg

13

Câu trả lời tốt nhất tôi tìm thấy là ở đây: Làm thế nào để nhắc nhở cuộc hẹn Outlook bật lên trước các cửa sổ khác bằng cách sử dụng một số VBA đơn giản.

Nó đòi hỏi phải thêm một vài dòng mã VBA đơn giản vào "ThisOutlookSession". Bây giờ, nó bật lên một cửa sổ mỗi lần. Tốt hơn nhiều.

  • Tạo chứng chỉ kỹ thuật số cho lần sau
  • Nhấn Bắt đầu và nhập 'chứng chỉ', chọn 'Chứng chỉ kỹ thuật số cho các dự án VBA'
  • Nhập tên cho chứng chỉ của bạn
  • Làm xong
  • Mở Outlook và nhấn Alt + F11 để khởi động trình chỉnh sửa VBA.
  • Trong cây bên trái, mở rộng 'Đối tượng Microsoft Office Outlook' và nhấp đúp vào 'ThisOutlookSession'
  • Dán mã này, sửa đổi văn bản trong dấu ngoặc kép cho phù hợp với sở thích của bạn. Để lại dấu ngoặc kép trong.

    Private Sub Application_Reminder(ByVal Item As Object)
    
    
        If TypeOf Item Is AppointmentItem Then
        MsgBox "Message text", vbSystemModal, "Message title"
        End If
    
    
    End Sub
    
  • Đăng nhập Macro để nó chạy bằng cách vào Công cụ> Chữ ký số kỹ thuật số và chọn chứng chỉ bạn đã tạo trước đó

  • Đóng cửa sổ VBA

Đã thử điều này trong Outlook 2010, Windows 7 nhưng nó không hoạt động :(
tekumara

Đã sử dụng nó như là một phần của giải pháp của Gullu. Cảm ơn nhiều.
Smandoli

Điều này hoạt động trên Outlook 2007, trong khi Gullu thì không.
Will Sheppard

7

Kể từ Phiên bản 1803 (tháng 2 năm 2018), tùy chọn "Hiển thị lời nhắc trên đầu các cửa sổ khác" hiện có sẵn. Nó không xuất hiện để được bật theo mặc định.

nhập mô tả hình ảnh ở đây


3
Tôi chưa có phiên bản cập nhật, nhưng điều này thật tuyệt! Và cũng chỉ 7 năm kể từ khi tôi hỏi. (Và đó là một sự thất vọng tại MS, cũng như một lời cảm ơn dành cho bạn.)
thursdaygeek

2
Đây là một bản cập nhật tuyệt vời cho một câu hỏi cũ. Lưu ý rằng điều này không hoàn toàn giống như "luôn luôn ở trên cùng", nhưng nó đảm bảo cửa sổ bật lên ở đầu thứ tự z để người dùng ít có khả năng bỏ lỡ nó.
Marc Lafleur

6

Không có cách nào. Công ty chúng tôi đã cố gắng leo thang trực tiếp lên Microsoft. Một điều mọi người làm ở đây là gán cho nó một âm thanh đáng ghét hơn, để giúp chú ý đến nó. Nhưng Microsoft đã nói với chúng tôi rằng đó là do thiết kế.


11
Tôi làm việc trong một trang trại hình khối - Tôi cố gắng giữ máy tính của mình im lặng cho người khác. :(
thursdaygeek

3
Nếu họ thực sự thiết kế, họ sẽ làm theo cách đó theo mặc định, nhưng cho phép nó được thay đổi. Họ "thiết kế", chúng ta học cách đưa ra nó?
thursdaygeek

Xem câu trả lời của tôi. Cuối cùng chúng tôi cũng có một giải pháp.
Gullu

Tôi đã tìm thấy một giải pháp của bên thứ ba. Công cụ thực tế Bảo vệ cửa sổ thực tế $ 30 (cũng được bao gồm trong tất cả các sản phẩm bao gồm cả Trình quản lý Windows thực tế $ 50) cho phép gán các cửa sổ luôn luôn ở trên cùng. Cộng với việc dễ dàng bật và tắt tính năng này. (lưu ý rằng nó không chỉ đơn thuần là giúp làm cho thẻ giá dễ chấp nhận hơn.) Tôi đã tìm thấy những thứ này khi dùng thử các công cụ tiện ích và màn hình ảo đa màn hình. Tôi đã sử dụng thứ hai trong vài tháng nay và rất hài lòng với nó.
Javaru

Tôi đoán giải pháp là sử dụng một công cụ tốt hơn! Thật tệ, đó không phải là sự lựa chọn đối với tôi :(
Jonathan Benn

6

Tương tự như anwer của Gullu ở trên nhưng có thay đổi để phù hợp với tiêu đề cửa sổ khác nhau:

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

Thậm chí tốt hơn sẽ là một cái gì đó như Dim olApp As Outlook.Application Set olApp = New Outlook.Application iReminderCount = olApp.Reminders.CountSau đó, bạn có thể loại bỏ các vòng lặp.
Zusukar

@Zusukar Reminders.Counttrả về tổng số lời nhắc được đặt trong các cuộc hẹn, không phải trong hộp thoại nhắc nhở hoạt động Trong hệ thống của tôi, ví dụ này trả về 22.
Geoff

@Zusukar Bạn có thể sử dụng thuộc tính Reminder.IsVisible một cách lý tưởng để đếm những cái nhìn thấy được, nhưng điều này luôn sai - có lẽ sự kiện xảy ra trước khi lời nhắc được đánh dấu là có thể nhìn thấy.
Geoff

3

Điều này đã làm phiền tôi quá. Sau một số tìm kiếm mãnh liệt, tôi đã tìm thấy một câu trả lời một phần: http://www.pcreview.co.uk/forums/hidden-outlook-reminder-t3972914.html

Nếu bạn thay đổi cài đặt "Nút trên thanh tác vụ" trong "Thuộc tính của thanh tác vụ và menu bắt đầu" thành "Không bao giờ kết hợp", thì nhóm sẽ tách ra và lời nhắc bật lên trước bất kỳ thứ gì bạn mở.

Tôi đã thử kiểm tra nó và thấy rằng nó không nhất quán; một lần nó ở ẩn đằng sau những gì tôi đang làm, và một lần khác nó xuất hiện phía trước. Trong cả hai trường hợp, có một biểu tượng trên thanh tác vụ trông khác với chính Outlook, vì vậy ít nhất có khả năng tôi sẽ chú ý đến nó.


Không thể khiến Outlook 2013 hoạt động chính xác ngay cả với Never Combine. Outlook 2013, Windows 7 32 bit.
CN

Đây không phải là một giải pháp tốt cho tôi, vì tôi thích kết hợp các ứng dụng trên thanh tác vụ
Jonathan Benn

3

Tôi đã sử dụng Filebox eXtender và khi lời nhắc đầu tiên xuất hiện, tôi mở nó và nhấp vào biểu tượng 'pin' mới ở trên cùng bên phải của thanh chú thích. Sau đó, khi lời nhắc tiếp theo đến, nó xuất hiện ở phía trước ...


PinMe! sẽ làm như vậy Nó là một công cụ di động miễn phí và thực hiện một nhiệm vụ này cực kỳ tốt. Tôi đã thử nó Outlook 2013 và nó hoạt động chính xác như tôi muốn. Outlook tiền cảnh hoặc thu nhỏ, lời nhắc lịch luôn bật ra phía trước.
CN

@Sun sẽ tặng PinMe! một phát súng
Chris Marisic

@Sun tôi thiết lập "siêu pin" trên cửa sổ thông báo để đảm bảo rằng nó luôn hiển thị vĩnh viễn bất kể điều gì cho đến khi tôi loại bỏ nó. Hoạt động như quảng cáo ngoài hộp, và nó cung cấp các thông báo liên tiếp. tuyệt vời.
Chris Marisic

Tôi đã thử PinMe và không thể có được cửa sổ để luôn ở trên đỉnh !!
xương sống

1

Tôi đã tìm thấy một addin có tên ShowReminder ( http://www.sagelamp.com/pages/showreminder.aspx ), đưa cửa sổ nhắc nhở lên trên cùng. Nó thậm chí hoạt động khi bạn thu nhỏ cửa sổ nhắc nhở.


3
Nói sản phẩm là $ 20 kể từ tháng 10 năm 2014.
nhật

Thiết lập thất bại đối với tôi trên Windows 10:The following package files could not be found: C:\Users\ukeim\AppData\Local\Temp\IXP000.TMP\Office2007PIARedist\o2007pia.msi
Uwe Keim

0

Cuối cùng tôi cũng tìm thấy một giải pháp đơn giản bằng Outlook VBA và EXE đơn giản.

Đây là làm thế nào để không bao giờ bỏ lỡ cuộc hẹn cuộc hẹn một lần nữa.

Tại sao một ứng dụng exe độc ​​lập chỉ cho mục đích này? Vâng, tôi đã có một hộp lớn màu đỏ được nhúng trong VBA, nhưng giải pháp đó có vấn đề (tôi tin rằng đó là vì tôi phải sử dụng hwnd và các thuộc tính hệ thống khác thường để giữ hộp lớn màu đỏ ở trên cùng). Vì vậy, để làm cho mọi thứ đơn giản hơn tại sao không phải là một EXE cơ bản mà làm một việc. Bạn có thể sử dụng các công cụ miễn phí từ microsoft (Visual studio Community 2015 miễn phí).

Đây là mã EXE. ứng dụng cửa sổ đơn giản với một hình thức. Biên dịch mã này.

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

Và đây là tất cả những gì tôi cần trong triển vọng VBA. Đặt cái này trong 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

Đây là phiên bản nâng cao của câu trả lời của tbone hoạt động trên các phiên bản tiếng Đức.

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

Tôi đã thêm danh hiệu Đức cửa sổ và cũng có một số chức năng mới ( BringWindowToTop, SetForegroundWindowSetFocus).

Hoạt động trên Windows 10 tiếng Đức của tôi cùng với Outlook 2016.

Tôi đã không quản lý để tạo chứng chỉ mới (nhấn Bắt đầu và nhập "chứng chỉ" không tiết lộ gì), nhưng chỉ cần chọn một chứng chỉ khác trong danh sách khi ký.


điều này làm cho ứng dụng chỉ nhấp nháy nhưng không đưa cửa sổ thông báo ra phía trước
KIC
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.