我在启动/登录时自动启动 Outlook 2016 时遇到问题,该问题旨在启动 Outlook 最小化到 Windows 系统托盘,这样一旦在 Windows 10 启动时调用,邮件将由邮件帐户收集(注意. 所有 POP 在这种情况下。)而程序驻留在系统托盘中保持不可见,直到用户需要。
下面的 .vbs 脚本确实可以按要求运行,但大多数时候它会引入两个不受欢迎的问题。
系统托盘中的 Outlook 图标显示一个“cog”覆盖,并显示消息“另一个程序正在使用 Outlook。要断开程序并退出 Outlook,请单击 Outlook 图标,然后单击立即退出”。
尝试从“打开 Outlook”上下文菜单(右键单击托盘中的 Outlook 图标)项打开 Outlook 会导致出现一个对话框,报告“未找到活动的资源管理器对象”。单击响应中的“确定”选项会启动 Outlook(尽管问题 1 - cog 覆盖)仍然存在。
当 Outlook 从桌面正常启动时,这两个问题都不存在,因此看起来 .vbs 脚本在某种程度上是负责任的。我过去曾成功使用此脚本(另见下文:https : //superuser.com/questions/467809/start-outlook-automatically-in-tray)作为启动菜单快捷方式和 hkcu“运行”注册表项.
任何人都可以提出原因或适当的代码修订以实现正确的功能吗?如果它很重要,Windows 10 是 64 位 Pro,安装的 Office(包括 Outlook)版本也是 64 位。
这是 .vbs 脚本调用的代码:
选项显式
OPTION EXPLICIT
CONST PATH_TO_OUTLOOK = """C:\Program Files\Microsoft Office\Office16\OUTLOOK.EXE"""
CONST SHOW_MAXIMIZED = 3
CONST MINIMIZE = 1
DIM shell, outlook
SET shell = WScript.CreateObject("WScript.Shell")
' Open Outlook
shell.Run PATH_TO_OUTLOOK, SHOW_MAXIMIZED, FALSE
ON ERROR RESUME NEXT
' Grab a handle to the Outlook Application and minimize
SET outlook = WScript.CreateObject("Outlook.Application")
WScript.Sleep(100)
outlook.ActiveExplorer.WindowState = SHOW_MAXIMIZED
' Loop on error to account for slow startup in which case the
' process and/or the main Outlook window is not available
WHILE Err.Number <> 0
Err.Clear
WScript.Sleep(100)
SET outlook = NOTHING
SET outlook = WScript.CreateObject("Outlook.Application")
outlook.ActiveExplorer.WindowState = MINIMIZE
WEND
ON ERROR GOTO 0
SET outlook = NOTHING
SET shell = NOTHING
周末在这个问题上花了几个小时后,我认为我已经解决了这些问题,并且一切都按预期运行了。
使用类似的代码示例,我编译了一个新脚本(见下文),我将其作为 Startup 文件夹中的快捷方式以及作为 HKCU 注册表“运行”分支的条目应用。
现在的问题!在两个单独的 Windows 10 Pro(均为 64 位架构)系统上测试脚本,都安装了 Outlook 2016 64 位作为 64 位 Office 套件的一部分,我发现在一个系统上,脚本在另一个系统上完美运行,我收到以下运行时错误:
脚本:D:\Neil's Files\Neil's File Cabinet\Neil's Emails\Start Outlook Minimized to Tray\Start Outlook 2016 Minimized To Tray.vbs
行:11 字符:5 错误:ActiveX 组件无法创建对象:'GetObject' 代码:800A01AD 源:Microsoft VBScript 运行时错误
这让我感到困惑,因为脚本文件和它的相关快捷方式都是彼此的物理副本,因为下面的修改后的脚本不包含路径引用(因为这些是由 Outlook.exe 的代码直接处理的),由无论使用哪种格式,都可以放置快捷方式或作为注册表字符串的数据元素。
这些系统确实有一些差异,但是出于比较目的,我将在这里总结我认为相关的那些:
系统 1:(问题系统)是 X58 Asus P6T7,Intel i720 成熟 PC,安装了许多程序,特别是 Outlook 2016 安装了相同的 12 个插件,但另外还有两个在启动时启动的相关程序,4team 的企业版Sync2 for Microsoft Outlook 和安全 PST 备份。启动时间很长(但可以接受),就像带有各种插件的 Outlook 启动一样。
系统 2:是当前一代的华硕 X99-Deluxe、i7 5930 新构建的电脑,除了 MS Office、Adobe CC 和一些实用程序外,几乎没有安装。
在系统 1 的情况下,Outlook 会按预期自动启动,但是在它加载初始屏幕期间(同时它正在加载插件),虽然 Outlook 继续完全打开但无法最小化,但会显示运行时错误......
这向我表明错误代码是激活窗口的部分,但是上面的错误消息是指“ActiveX 组件无法创建对象:'GetObject'”,这表明代码行存在问题“Set OLObj = GetObject( "","Outlook.Application")"??
希望有人可以在类似的设置上测试代码并报告回来?或者,给我一个关于发生了什么以及如何解决它的指针。我当然也欢迎对代码提出任何改进建议!
** 快速更新 ** 现已在 HP Elitebook 8440P 笔记本电脑上进行测试 - Windows 10 Pro 64 位和 Office 64 位 + 相同的 12 个 Outlook 插件 - 功能符合预期.....
** 进一步更新 ** 在第二台 HP Elitebook 8440P 笔记本电脑上测试 - Windows 10 Pro 64 位和 Office 64 位 + 相同的 12 个 Outlook 插件 - 再次出现上述运行时错误............努力理解为什么这些结果发生??有什么想法吗???
以下代码按“原样”提供,以供寻求相同 Outlook 自动启动标准的任何其他人使用。使用 System 2 进行的测试表明它可以工作,所以我希望其他人也能获得类似的成功,直到解决未解决的问题。
注意:要调整 Outlook 启动窗口大小(在自动最小化之前的 10 秒暂停期间)以反映个人偏好,请更改以下代码行中的数值:
WshShell.Run "OUTLOOK.EXE" , 3, 假
对于最大化的窗口大小,将值更改为 3 对于恢复的窗口大小,将值更改为 2
OPTION EXPLICIT
Dim WshShell
Dim OLObj
Set WshShell = WScript. CreateObject ( "Wscript.Shell" )
'Open Outlook: Note that inspite of the launch options, it will open the program in a normal window.
'The file location path is not necessary as Windows 10 correctly identifies Outlook's location.
WshShell.Run "OUTLOOK.EXE" , 3, false
'This will mimimise it to the system tray after a 10 second pause to allow for mail collection on Outlook launch.
WScript.Sleep (10000)
Set OLObj = GetObject("","Outlook.Application")
'Activates the window
OLObj.ActiveExplorer.Activate
'Sends the command to minimise
OLObj.ActiveExplorer.WindowState = 1
'Outlook does not immediately minimise to the system tray so that 'Send/Receive' can initiate mail collection.
感谢来自 Microsoft 的“脚本专家”论坛的 jrv,他提供了一个经过修改的(简化的)代码,如下所示。我可以报告说,与原始代码一样,它在与以前相同的两个系统上完美运行,而在其他两个系统上再次出现故障......非常困惑!
运行时错误:
脚本:D:\Neil's Files\Neil's File Cabinet\Neil's Emails\Start Outlook Minimized to Tray\Start Outlook 2016 Minimized To Tray.vbs
行:3 字符:5 错误:ActiveX 组件无法创建对象:'Outlook.Application' 代码:800A01AD 源:Microsoft VBScript 运行时错误
修改后的代码:
Set WshShell = CreateObject ( "Wscript.Shell" )
WshShell.Run "OUTLOOK.EXE" , 3, False
Set ol = CreateObject("Outlook.Application")
ol.ActiveExplorer.Activate
ol.ActiveExplorer.WindowState = 1