web-dev-qa-db-ja.com

Windows 7でOutlookの予定表のアラームを常に有効にする方法

私はWindows 7を使い始めたばかりで、Outlookのアラームをポップアップ表示して目立つように表示する方法を知りたいです。タスクバー上のOutlookスタック内の別のウィンドウのように、彼らは慎重に開き続けます。結果として、私はそれらを見逃し続けています。

見逃しやすくするにはどうすればよいですか。

(明らかに、自分自身を最前面に追いやるような厄介なアプリは望ましくありません。ただし、そのような動作が望ましい場所がいくつかあります。Outlookカレンダーのリマインダーもその1つです)。

121
thursdaysgeek

私はOutlook 2010と同じ問題を抱えていました。下記の手順を使用してください、それは魅力のように動作します。すべてのマクロを有効にすることを忘れないでください。[セキュリティセンター]> [マクロ設定]。

  • 後でデジタル証明書を作成する:[スタート]をクリックして「証明書」と入力し、[VBAプロジェクト用のデジタル証明書]を選択します。
  • 証明書の名前を入力してください。 OKをクリックしてください。 Outlookを開いてヒット Alt + F11 VBAエディタを起動します。
  • 左側のツリーで、[Microsoft Office Outlook Objects]を展開し、[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
    
  • それが実行されるようにマクロに署名してください:Tools> Digital Signature ...そして先に作成した証明書を選択してください

  • VBAウィンドウを閉じる
  • [ファイル]> [オプション]> [セキュリティセンター]> [セキュリティセンターの設定]> [マクロ設定]ですべてのマクロを有効にします。
60
Gullu

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

17
Eric L

私が見つけた最良の答えはここにあります: Outlookの予定のリマインダを他のウィンドウの前にポップアップさせるための簡単なVBAを使う方法

「ThisOutlookSession」に数行の単純なVBAコードを追加する必要があります。今、それは毎回ウィンドウをポップアップします。ずっといい。

  • 後でデジタル証明書を作成する
  • [スタート]ボタンをクリックして「証明書」と入力し、[VBAプロジェクトのデジタル証明書]を選択します。
  • 証明書の名前を入力してください
  • 完了
  • Outlookを開き、Alt + F11を押してVBAエディタを起動します。
  • 左側のツリーで、[Microsoft Office Outlook Objects]を展開し、[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ウィンドウを閉じる
13
tommykey

上記のGulluのanwerと同じですが、異なるウィンドウタイトルに対応するように変更します。

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
6
tbone

道はない。当社はマイクロソフトに直接エスカレートしてみました。ここで人々がすることの1つは、それに気付かせるのを助けるために、それにもっと不快な音を割り当てることです。しかし、Microsoftはそれが仕様によるものだと言っています。

6
Brian

バージョン1803(2018年2月)以降、「他のウィンドウの上にアラームを表示」オプションが利用可能になりました。デフォルトでは有効になっていないようです。

enter image description here

6
Scott Beeson

これも私を悩ませていました。いくつかの強烈な検索の後、私は部分的な答えを見つけました: http://www.pcreview.co.uk/forums/hidden-Outlook-reminders-t3972914.html

[タスクバーと[スタート]メニューのプロパティ]の下の[タスクバーボタン]の設定を[結合しない]に変更すると、グループ化が解除され、開いているものの前にアラームがポップアップ表示されます。

私はそれをテストしようとしましたが、それは矛盾していることがわかりました。私が取り組んでいたものの後ろに隠れたままだったものもあれば、前にポップアップしたものもありました。どちらの場合も、Outlook自体とは異なるアイコンがタスクバーに表示されていたので、少なくとも気が付く可能性がありました。

3
Mark Ransom

私は Filebox eXtender を使用し、最初のリマインダーが表示されたらそれを開き、キャプションバーの右上にある新しい「ピン」アイコンをクリックします。それから次のリマインダーが入ってくるとき、それは前景に入ってきます...

3
jacorb effect

ShowReminders( http://www.sagelamp.com/pages/showreminders.aspx )というアドインが見つかり、リマインダーウィンドウが一番上に表示されます。 。リマインダーウィンドウを最小化しても機能します。

1
user245293

これはドイツ語版で動作する 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

ドイツ語のウィンドウタイトルといくつかの新しい関数( BringWindowToTopSetForegroundWindowSetFocus )を追加しました。

Outlook 2016と一緒に私のドイツ語のWindows 10上で動作します。

私はnotを使って新しい証明書を生成しました(Startを押して "certificate"を入力しても何も明らかになりませんでした)。

0
Uwe Keim

私はついにOutlook VBAと簡単なEXEを使った簡単な解決策を見つけました。

Outlook会議の予定を二度と見逃すことはありません。

なぜこの目的でスタンドアローンのexeアプリケーションが必要なのでしょうか。 VBAに大きな赤い箱を埋め込んでいたのですが、その解決策には問題がありました(大きな赤い箱を上に表示するには、hwndやその他の珍しいシステムプロパティを使用する必要があるためです)。それで、物事をより単純にするために、1つのことをする基本的なEXEではない理由。 Microsoftの無料ツールを使用できます(Visual Studio Community 2015は無料です)。

これがEXEコードです。 1つのフォームを持つシンプルなWindowsフォームアプリケーション。このコードをコンパイルしてください。

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

これがOutlook 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
user2635566