我在 64 位 Vista Business 上使用 Outlook 2007,一直遇到 Outlook 日历通知显示在其他窗口后面的问题。这让我唯一能想到我应该在开会的线索是任务栏上有一个蓝色条目。我还没有找到与此相关的设置。
有其他人遇到过这个问题吗?有人知道如何让通知窗口始终位于其他窗口之上吗?
答案1
这个免费的插件可能会帮助强制提醒窗口按照您希望的方式弹出: http://blogs.kraftkennedy.com/index.php/2010/06/07/getting-outlook-meeting-reminders-in-focus-over-other-applications/
答案2
如果您想要 Outlook 中的答案,那么这个帖子有大部分答案。但是它对我不起作用,因为提醒窗口在Application_Reminder
子程序完成之前不可见,这意味着FindWindowA
找不到提醒窗口。
如果你遇到了同样的问题,我使用 破解了一个解决方案SetTimer
。我会重新发布完整的步骤,尽管顶部和尾部只是重复了另一篇文章。
- 创建数字证书以供日后使用。点击“开始”并输入“证书”,选择“VBA 项目的数字证书”
- 输入证书名称,然后按完成
- 打开 Outlook 并按ALT+F11启动 VBA 编辑器。
- 在左侧的树中,展开“Microsoft Office Outlook 对象”并双击“ThisOutlookSession”
- 粘贴以下代码:
选项明确
私有子应用程序_退出()
' 退出时关闭计时器 非常重要
调用 DeactivateTimer子目录结束
Private Sub Application_Reminder(ByVal 项目作为对象)
' 由于提醒窗口尚未可见,因此在 1 秒内调用辅助函数
如果 TypeOf Item 为 AppointmentItem 则 ActivateTimer (1)子目录结束
- 右键单击“ThisOutlookSession”,然后选择“插入”>“模块”,添加新模块
- 在新模块(您应该已经切换到该模块)中粘贴以下代码:
选项明确
私有声明 PtrSafe 函数 FindWindowA Lib“user32”(_
ByVal lpClassName 作为字符串,_
ByVal lpWindowName 作为字符串)作为 Long私有声明 PtrSafe 函数 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私有声明 PtrSafe 函数 SetTimer Lib“user32”(_
ByVal hwnd As Long,_
ByVal nIDEvent As Long,_
ByVal uElapse As Long,_
ByVal lpTimerfunc As Long)As Long私有声明 PtrSafe 函数 KillTimer Lib“user32”(_
ByVal hwnd As Long,_
ByVal nIDEvent As Long)As Long私有 Const SWP_NOSIZE = &H1
私有 Const SWP_NOMOVE = &H2
私有 Const FLAGS 只要 = SWP_NOMOVE 或 SWP_NOSIZE
私有 Const HWND_TOPMOST = -1Private TimerID As Long '需要定时器 ID 才能最终关闭定时器。如果定时器 ID 不为 0,则定时器正在运行
公共子激活计时器(ByVal nSeconds As Long)
'SetTimer 调用接受毫秒,因此转换为秒
nSeconds = nSeconds * 1000' 在调用 SetTimer 之前检查计时器是否正在运行
如果 TimerID <> 0 则调用 DeactivateTimerTimerID = SetTimer(0, 0, nSeconds, Reminder_Helper 的地址)
如果 TimerID = 0 则 MsgBox “计时器激活失败。”
子目录结束
Public Sub DeactivateTimer()
Dim lSuccess 为 Long
如果 TimerID <> 0 则
lSuccess = KillTimer(0, TimerID)
如果 lSuccess = 0 则
MsgBox "定时器停用失败。"
否则
TimerID = 0
End If
End If子目录结束
Private Sub Reminder_Helper(ByVal hwnd 为长,ByVal uMsg 为长,ByVal idevent 为长,ByVal Systime 为长)
Dim ReminderWindowHWnd 作为变体
如果 idevent = TimerID 则
出错时继续下一个
ReminderWindowHWnd = FindWindowA(vbNullString, "1 提醒")
SetWindowPos ReminderWindowHWnd, HWND_TOPMOST, 0, 0, 0, 0, FLAGS
DeactivateTimer万一
子目录结束
- 对宏进行签名,以便它能够运行,方法是转到“工具”>“数字签名...”,然后选择您之前创建的证书
- 关闭 VBA 窗口
- 在文件 > 选项 > 信任中心 > 信任中心设置 > 宏设置中启用所有宏
- 关闭并重新打开 Outlook
我会把这个贴在另一篇文章但它对我这样的新用户来说是锁定的!