在 Windows 7 上使用 Outlook 2013,我创建了这个宏,只是为了测试它:
Private Sub Application_Reminder(ByVal Item As Object)
Activeexplorer.Activate
End Sub
每当我在处理不同的应用程序并且触发 Outlook 提醒时,Outlook 就会成为活动窗口,从我正在处理的应用程序中窃取焦点。
怎么可能??
我的意思是,我认为“Activeexplorer.Activate”方法使用了一些 Windows api,例如“SetForegroundWindow”或者“SetActiveWindow”或其他一些 api。
所有这些 api 都禁止窃取焦点,所以我的问题是 Outlook vba 方法如何能够如此轻松和可怕地窃取焦点?
警报已部分解除,如https://msdn.microsoft.com/it-it/library/windows/desktop/ms633539(v=vs.85).aspx所述,SetForegroundWindow 可由不在前台如果“前台锁定超时已过期(请参阅 SystemParametersInfo 中的 SPI_GETFOREGROUNDLOCKTIMEOUT)。”</p>
我将“HKCU:\Control Panel\Desktop”处的注册表项“ForegroundLockTimeout”的值从零更改为 20000,现在,在我的具体情况下,Outlook 不会窃取焦点。
我想知道哪个是“ForegroundLockTimeout”注册表项的最大值,或者换句话说,是否可以永久禁用不在前台的任何其他进程从活动应用程序中窃取焦点。