启动Outlook 2016(64位)自动最小化到Windows 10(64位)系统托盘 - 未找到活动的Explorer对象

时间:2017-08-06 14:59:47

标签: vbscript windows-10 system-tray outlook-2016

我在启动/登录时自动启动Outlook 2016时出现问题,该问题旨在将Outlook最小化启动到Windows系统托盘,这样一旦在Windows 10启动邮件中调用,将由邮件帐户收集(s )(NB。本案例中的所有POP。)虽然程序驻留在系统托盘中,但在用户需要之前仍然不可见。

下面的.vbs脚本确实可以正常运行,但大部分时间都会引入两个不受欢迎的问题。

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

  2. 尝试从“打开Outlook”中打开Outlook'上下文菜单(右键单击托盘中的Outlook图标)项会导致出现一个对话框报告"找不到活动的资源管理器对象"。单击"确定"响应中的选项启动Outlook(尽管问题1 - cog overlay)仍然存在。

  3. 当从桌面正常启动Outlook时,这两个问题都不存在,因此看起来.vbs脚本在某种程度上是负责任的。我过去已成功使用此脚本(另请参见下文:https://superuser.com/questions/467809/start-outlook-automatically-in-tray)作为启动菜单快捷方式和hkcu'运行'注册表项。

    任何人都可以建议原因或者交替使用合适的代码修订来实现正确的功能吗?如果它很重要,Windows 10是64位Pro,安装的Office(包括Outlook)的版本也是64位。

    这是.vbs脚本调用的代码:

    OPTION EXPLICIT

    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文件夹中的快捷方式应用,并作为&#39; run&#39;的一个条目。 HKCU注册处的分支。

    现在问题!在两个单独的Windows 10 Pro(均为64位体系结构)系统上测试脚本,并将Outlook 2016 64位作为64位Office套件的一部分安装,我发现在一个系统上脚本运行完美,另一个我收到以下运行时错误:

    脚本:D:\ Neil的文件\ Neil的文件柜\ Neil的电子邮件\启动Outlook最小化到托盘\启动Outlook 2016最小化到Tray.vbs

    线:11 查尔:5 错误:ActiveX组件无法创建对象:&#39; GetObject&#39; 代码:800A01AD 来源:Microsoft VBScript运行时错误

    这令我感到困惑,因为脚本文件及其相关的快捷方式都是彼此的物理副本,因为下面修订的脚本不包含路径引用(因为这些是由Outlook的代码直接处理的。 exe)通过放置快捷方式或作为注册表字符串的数据元素来识别,无论使用哪种格式。

    系统确实存在一些差异,为了比较的目的,我将总结那些我认为与此相关的内容:

    系统1 :(问题系统)是X58 Asus P6T7,Intel i720成熟的PC,安装了许多程序,特别是Outlook 2016安装了相同的12个插件,另外还有两个相关程序在启动时启动,企业4team的Sync2 for Microsoft Outlook和Safe PST Backup的版本。启动时间相当长(但可以接受),因为Outlook Startup及其各种插件也是如此。

    系统2:是当前一代的华硕X99-Deluxe,i7 5930新版PC,几乎没有安装,可以节省MS Office,Adobe CC和一些实用程序。

    对于系统1,Outlook会按预期自动启动,但是在它加载启动画面期间(当它正在加载插件时)会显示运行时错误,尽管Outlook继续完全打开但未能最小化.....

    这告诉我,错误代码是激活窗口的部分,但上面的错误消息是指&#34; ActiveX组件无法创建对象:&#39; GetObject&#39;&#34;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39 ;这反而代表了代码行的问题&#34;设置OLObj = GetObject(&#34;&#34;,&#34; Outlook.Application&#34;)&#34; ??

    希望有人可以在类似的设置上测试代码并报告回来?或者,给我一个关于发生了什么以及如何解决它的指针。我当然也欢迎任何建议的代码改进!

    **快速更新**现已在HP Elitebook 8440P笔记本电脑上测试 - Windows 10 Pro 64位与Office 64位+相同的12个Outlook插件 - 功能如预期.....

    **进一步更新**在第二台HP Elitebook 8440P笔记本电脑上测试 - Windows 10 Pro 64位与Office 64 Bit +相同的12个Outlook插件 - 再次遇到RunTime错误.......努力理解为什么这些结果正在发生?任何想法任何人???

    以下代码提供&#34;原样&#34;为了其他任何寻求相同Outlook自动启动条件的人的利益。系统2的测试表明它的工作原理,所以我希望其他人在未解决的问题得到解决之前也能取得类似的成功。

    注意:要调整Outlook启动窗口大小(在自动最小化之前的10秒暂停期间)以反映个人首选项,请更改以下代码行中的数值:

    WshShell.Run&#34; OUTLOOK.EXE&#34; ,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.
    

    感谢微软&#34; The Scripting Guys&#34;论坛的人提供了修改后的(简化)代码,如下所示。我可以报告说,与原始代码一样,它在与以前相同的2个系统上完美运行,而在另外两个系统上再次发生故障......非常困惑!!

    运行时错误:

    脚本:D:\ Neil的文件\ Neil的文件柜\ Neil的电子邮件\启动Outlook最小化到托盘\启动Outlook 2016最小化到Tray.vbs

    线:3 查尔:5 错误:ActiveX组件无法创建对象:&#39; Outlook.Application&#39; 代码: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
    

3 个答案:

答案 0 :(得分:0)

我的答案适用于Windows 7上的Office 2013,我希望它也适合您。

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

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

    然后,您在VBScript文件中需要做的就是执行快捷方式:

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

    请注意,由于此解决方案使用快捷方式,因此您可以通过将快捷方式放入“所有用户启动”文件夹中来完全删除VBScript部分。

答案 1 :(得分:0)

又来了!我有一个答案可以通过使用第三方软件DisplayFusion来绕过VBScript的任何问题。我不知道你会怎么想,但我测试了它,它在这里工作。我在家里和工作中使用它来管理多个显示器和各种其他东西。它甚至可以帮助解决您使用的其他程序的问题,并使各种VBS黑客变得多余。

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

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

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

Triggers tab

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

Add Trigger window

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

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

答案 2 :(得分:0)

您可以使用like file * .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