1

我在启动/登录时自动启动 Outlook 2016 时遇到问题,该问题旨在启动 Outlook 最小化到 Windows 系统托盘,这样一旦在 Windows 10 启动时调用,邮件将由邮件帐户收集(注意. 所有 POP 在这种情况下。)而程序驻留在系统托盘中保持不可见,直到用户需要。

下面的 .vbs 脚本确实可以按要求运行,但大多数时候它会引入两个不受欢迎的问题。

  1. 系统托盘中的 Outlook 图标显示一个“cog”覆盖,并显示消息“另一个程序正在使用 Outlook。要断开程序并退出 Outlook,请单击 Outlook 图标,然后单击立即退出”。

  2. 尝试从“打开 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
4

3 回答 3

1

您可以使用类似文件 *.reg:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"Outlook"="C:\\Windows\\system32\\cmd.exe /c \"start \"\" /min \"C:\\Program Files\\Microsoft Office\\Office16\\OUTLOOK.EXE\"\""

[HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Preferences]
"MinToTray"=dword:00000001
于 2017-09-11T20:14:45.550 回答
0

又是我!我有一个答案,应该通过使用第三方软件DisplayFusion绕过 VBScript 的任何问题。我不知道您对此有何感受,但我对其进行了测试,并且在这里可以正常工作。我在家里和工作中使用它来管理多个显示器和其他各种东西。它甚至可以帮助解决您使用的其他程序的问题,并使各种 VBS hack 变得多余。

在您的情况下,有一个称为“触发器”的功能。请注意,虽然 DF 有免费版本,但您必须激活 30 天试用才能让 Pro 版本使用触发器,之后,由您决定是否值得您花时间。

首先,安装 DF 后,您需要打开其设置窗口(右键单击桌面并转到 DisplayFusion > 设置)。

转到触发器选项卡,然后单击添加。

触发器选项卡

设置创建窗口时的触发器。告诉触发器每个进程 ID 只激活一次,这样它就不会尝试最小化后续窗口,例如在撰写新电子邮件时。找到 Outlook.exe 的路径。然后,在右侧添加一个动作以最小化窗口。

添加触发窗口

单击确定两次,然后通过加载 Outlook 来查看它是否有效。对我来说,启动画面正常显示,然后主窗口一出现就最小化。

DF 作为具有管理员权限的系统服务运行,并且已经过大量软件包的测试,因此如果此方法对您来说也失败了,则可能表明您的系统/Office 配置存在更大的问题。

于 2017-08-09T09:10:21.847 回答
0

我有一个适用于 Windows 7 上的 Office 2013 的答案,我希望它也适用于你。

本质上,此解决方案绕过了在加载后尝试强制 Outlook 最小化的问题。相反,它依赖于使用已配置为以最小化状态加载程序的快捷方式。

  1. 将 Outlook 的快捷方式复制到包含脚本的目录中。
  2. 右键单击快捷方式并打开属性。
  3. 在快捷方式选项卡中,将运行模式更改为最小化。按确定。

快捷方式属性截图

然后,您需要在 VBScript 文件中执行该快捷方式,如下所示:

Dim sh : Set sh = CreateObject("WScript.Shell")
sh.run "Outlook.lnk"

请注意,由于此解决方案使用快捷方式,因此您可以通过将快捷方式放入 All Users Startup 文件夹来完全删除 VBScript 部分。

于 2017-08-07T09:19:32.903 回答