私はWindows 7を使い始めたばかりで、Outlookのアラームをポップアップ表示して目立つように表示する方法を知りたいです。タスクバー上のOutlookスタック内の別のウィンドウのように、彼らは慎重に開き続けます。結果として、私はそれらを見逃し続けています。
見逃しやすくするにはどうすればよいですか。
(明らかに、自分自身を最前面に追いやるような厄介なアプリは望ましくありません。ただし、そのような動作が望ましい場所がいくつかあります。Outlookカレンダーのリマインダーもその1つです)。
私はOutlook 2010と同じ問題を抱えていました。下記の手順を使用してください、それは魅力のように動作します。すべてのマクロを有効にすることを忘れないでください。[セキュリティセンター]> [マクロ設定]。
このコードを貼り付けます:
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 ...そして先に作成した証明書を選択してください
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
}
私が見つけた最良の答えはここにあります: 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ウィンドウを閉じる
上記の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
道はない。当社はマイクロソフトに直接エスカレートしてみました。ここで人々がすることの1つは、それに気付かせるのを助けるために、それにもっと不快な音を割り当てることです。しかし、Microsoftはそれが仕様によるものだと言っています。
これも私を悩ませていました。いくつかの強烈な検索の後、私は部分的な答えを見つけました: http://www.pcreview.co.uk/forums/hidden-Outlook-reminders-t3972914.html
[タスクバーと[スタート]メニューのプロパティ]の下の[タスクバーボタン]の設定を[結合しない]に変更すると、グループ化が解除され、開いているものの前にアラームがポップアップ表示されます。
私はそれをテストしようとしましたが、それは矛盾していることがわかりました。私が取り組んでいたものの後ろに隠れたままだったものもあれば、前にポップアップしたものもありました。どちらの場合も、Outlook自体とは異なるアイコンがタスクバーに表示されていたので、少なくとも気が付く可能性がありました。
私は Filebox eXtender を使用し、最初のリマインダーが表示されたらそれを開き、キャプションバーの右上にある新しい「ピン」アイコンをクリックします。それから次のリマインダーが入ってくるとき、それは前景に入ってきます...
ShowReminders( http://www.sagelamp.com/pages/showreminders.aspx )というアドインが見つかり、リマインダーウィンドウが一番上に表示されます。 。リマインダーウィンドウを最小化しても機能します。
これはドイツ語版で動作する 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
ドイツ語のウィンドウタイトルといくつかの新しい関数( BringWindowToTop
、 SetForegroundWindow
、 SetFocus
)を追加しました。
Outlook 2016と一緒に私のドイツ語のWindows 10上で動作します。
私はnotを使って新しい証明書を生成しました(Startを押して "certificate"を入力しても何も明らかになりませんでした)。
私はついに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