在托盘中自动启动Outlook


11

有没有一种方法可以在登录时自动启动Outlook,但是将其最小化到系统任务栏(通知区域)?启动PC时,我不希望我的收件箱露面,只有收到新邮件时才显示离散通知。

如果这很重要,我正在使用Outlook 2003。


1
看一下这篇文章:support.microsoft.com/kb/251340
Reorx 2014年

@Reorx回答这个问题
kinokijuf 2014年

Answers:


15

Windows 7(x64)上的Outlook 2010(x86):启动时启动并最小化到系统托盘

我知道这个线程有些旧;但是,通过网络搜索可以找到许多有关此问题的信息,而我一直找不到能够提供有效解决方案的解决方案。无论出于何种原因,都不能在所有情况下都正常解决此问题。

问题:

  • 初次登录时,Outlook图标在任务栏上仍然可见,迫使其还原该窗口,然后手动最小化,然后Outlook将从任务栏上将其自身删除。
  • 只是将Outlook快捷方式添加到“启动”文件夹中,然后从Outlook任务栏图标的上下文菜单中选择“最小化时隐藏”并不能解决问题。
  • 使用批处理文件或快捷方式中的/ Min标志也不起作用。

解:

  1. 手动打开Outlook,然后右键单击“ Outlook任务栏”图标以验证是否选中了“最小化时隐藏”。
  2. 创建一个新的文本文件并插入以下代码。

    OPTION EXPLICIT
    
    CONST PATH_TO_OUTLOOK = """C:\Program Files (x86)\Microsoft Office\Office14\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
  3. 重要!确保进行更改PATH_TO_OUTLOOK以反映安装的实际位置。

  4. 将文本文件重命名为任何您想要的.vbs扩展名,以强制Windows将其识别为VBScript。

可选的:

  1. 将脚本存储在您想要的任何位置。
  2. 创建脚本的快捷方式,并将其放置在“启动”文件夹中。
  3. 右键单击快捷方式,然后选择属性。
  4. 使用“ 更改图标”按钮,浏览到Outlook可执行文件的位置,然后选择存储在可执行文件中的Outlook图标。

性能改进:

除了在启动文件夹中放置脚本或脚本的快捷方式外,还可以编辑注册表,以便在登录时立即运行脚本。

  1. 请按照上面“ 解决方案”部分中的步骤1-4 。
  2. 将脚本放置在您想要的任何位置。
  3. 如果需要,向注册表项添加新的字符串值或新的扩展字符串值HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
  4. 随心所欲命名。
  5. 修改使用脚本路径创建的新值。

我注意到您有一个未注册用户和注册用户-您可以并且当然应该通过使用页面底部的“联系我们”链接来合并这些用户
Journeyman Geek

适用于Windows 8.1和Office 2013!唯一需要更改的是PATH_TO_OUTLOOK应该是Office15而不是Office14。你也需要添加HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Outlook\Preference\MinToTray到注册表用的值为1
内特

当我从“启动”文件夹中手动执行此脚本时,它的启动确实已最小化,但是Outlook图标卡在了任务栏中。我只想要它在我的盘子里。当我使用任务栏图标激活Outlook并将其最小化时,它进入任务栏并按预期方式离开任务栏。
rolandow '16

@rolandow问题说明的第一部分中提到了图标停留在任务栏中的问题。如果无法正常工作,则很可能是计时问题。我发现按照建议将其添加到注册表中通常可以解决由于Windows在启动期间执行项目的方式而导致的任何计时问题。您可以尝试的另一件事是更改Wscript.Sleep(XXX)值的值。
杰森

7

Outlook没有为此的内置功能,但是您可以使用以下start命令:

  1. 在“启动”文件夹中创建一个指向执行命令的快捷方式

    cmd /c start /min "" "FullPathOfOutlook.exe"
    

    或包含命令的批处理文件

    @start /min "" "FullPathOfOutlook.exe"
    
  2. 右键单击任务栏图标,然后选中最小化时隐藏


不起作用。Outlook仍会开始最大化。
kinokijuf 2012年

也许我不清楚。我在计算机上使用上述方法(带有批处理文件)。有用。
丹尼斯

您有什么版本的Outlook?
kinokijuf 2012年

Outlook 2007,但这无关紧要。我start经常使用以最小化许多启动应用程序,并且可以与所有这些应用程序一起使用。
丹尼斯

我可以确认丹尼斯在说什么。在装有Outlook 2003的XP计算机上,我start /min "" "C:\Program Files\Microsoft Office\OFFICE11\OUTLOOK.exe"在Startup文件夹中使用了一个批处理文件,并且在登录时它的打开最小化。我对Win7 / Outlook 2010进行了相同的操作,只是路径不同。
2012年

0

如果您可以通过键入从命令行打开Outlook outlook.exe,则可以创建一个包含此代码的批处理文件 start /b /min outlook.exe,并将其放在Windows启动文件夹中。


0

在带有Outlook 2010的Windows 7上,在START命令中使用引号时,将打开一个新的命令窗口,但Outlook无法启动。Windows 7 Pro和Enterprise版本的32位版本(都具有最新更新)会发生这种情况。我不能说64位版本或其他版本是否会发生这种情况。

要解决该问题,必须省略要使用START命令启动的“ path \ program”周围的所有引号。但是,由于路径名通常包含空格,因此除非截断路径(将其缩短),否则您可能会收到其他错误。如果您安装了多个Microsoft产品,则路径中的截断名称可能会有所不同。若要获取正确的截断的路径,请在DOS提示符下(在CMD窗口中)使用以下命令行:FOR / D%T IN(“ C:\ Program Files \ Microsoft Office \ Office14 \ Outlook”)DO ECHO%〜sT

这是使用从上面获得的结果时对我有用的示例:START / MIN C:\ Progra〜1 \ Micros〜1 \ Office14 \ Outlook

注意:Office14指的是2010版,而Office12指的是2007版。另外请注意,这些命令行中不需要Outlook.exe末尾的.exe。


您认为有什么理由比这更好start /min "" "FullPathOfOutlook.exe"吗?
斯科特

0

我花了相当长的时间使用以上代码,并感谢所有以前的贡献者分享他们的工作/改进/建议。但是,最近,当我将其与Windows 10(64位)和Outlook 2016(64位)结合使用时,遇到了两个不受欢迎的问题:

  1. 系统任务栏中的Outlook图标显示一个'cog'叠加层,并显示消息“另一个程序正在使用Outlook。要断开程序并退出Outlook,请单击Outlook图标,然后单击立即退出”。

  2. 尝试从“打开Outlook”上下文菜单(右键单击任务栏中的Outlook图标)项打开Outlook会导致显示一个对话框,报告“未找到活动的浏览器对象”。在响应中单击“确定”选项将启动Outlook(尽管问题1-齿轮覆盖)仍然存在。

为了解决上述问题,我着手寻找一些类似的代码,可以将它们编译以满足原始海报的期望目标(这符合我自己的要求)。

下面的代码按“原样”提供,以使其他SuperUser受益匪浅,请注意,尽管我已经在两个W10 64位系统(均安装了64位Office)上测试了该代码,但我仍要解决运行时问题一个系统上的问题。其他功能完美无缺。如果需要,可以在此处查看完整的详细信息:https : //stackoverflow.com/questions/45533261/start-outlook-2016-64-bit-automatically-minimised-to-windows-10-64-bit-syste

随着测试的继续,我将随时向您评估任何进展。

**快速更新** **现在已在HP Elitebook 8440P笔记本电脑上进行了测试-Windows 10 Pro 64位与Office 64位+相同的12个Outlook附加组件-根据以上原始文章中概述的要求,功能完美无缺.....

**进一步更新**在第二台HP Elitebook 8440P笔记本电脑上进行了测试-Windows 10 Pro 64位与Office 64位+相同的12个Outlook插件-再次遇到运行时错误:(

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.

0

我进行了一些搜索和测试,最终发现以下vbscript代码可在我的Win10笔记本电脑中使用:

set shell = createobject("wscript.Shell")
shell.run "outlook.exe", 7, False     '... SH_SHOWMINNOACTIVE=7 "should" work
shell.sendkeys "% n"     ' ... Minimize Alt Space Bar - n

只需在Task Scheduler中将其设置为动作,然后像创建启动应用程序一样进行即可。


0

我喜欢最重要的答案,但我不喜欢它在CScript中...所以我在PowerShell中实现了...

它与Windows 10和Office 365完美兼容。

颜色在这里设置格式:https : //gist.github.com/NotoriousPyro/d30a96d2a89cf783ef3081b13d4816a0

<#
.Synopsis

Automatically finds, runs and places Outlook into the system tray.

.Description

Automatically finds, runs and places Outlook into the system tray.
By default, Outlook will start full-screen even when you have the option to minimize tray enabled and start the app as minimized.

This requires that the OUTLOOK.EXE tray icon is enabled and that the minimize to tray option is on.

Author: NotoriousPyro (Craig Crawford)

#>

$autostartOutlook = $true

$outlook = Invoke-Command -ScriptBlock {
    $versions = Get-ChildItem "HKLM:\SOFTWARE\Microsoft\Office" | Where-Object { $_.Name -like '*.*' } | Sort-Object -Property Name -Descending

    $outlookexe = $versions.ForEach({
        $path = 'Registry::' + $_.Name
        try
        {
            $versionPath = Get-ItemProperty -LiteralPath (Join-Path $path 'Outlook\InstallRoot') -Name Path -ErrorAction SilentlyContinue
            $installRoot = ($versionPath).Path
        }
        catch {}

        if ($installRoot -ne $null)
        {
            $outlookexe = Join-Path $installRoot 'OUTLOOK.EXE'

            if (Test-Path -Path $outlookexe)
            {
                return $outlookexe
            }
        }
    })
    return $outlookexe
}

Add-Type -TypeDefinition '
public enum ShowStates
{
    Hide = 0,
    Normal = 1,
    Minimized = 2,
    Maximized = 3,
    ShowNoActivateRecentPosition = 4,
    Show = 5,
    MinimizeActivateNext = 6,
    MinimizeNoActivate = 7,
    ShowNoActivate = 8,
    Restore = 9,
    ShowDefault = 10,
    ForceMinimize = 11,
}
'

$User32Definition = @'
    [DllImport("user32.dll")] public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
    [DllImport("user32.dll")] public static extern bool IsWindowVisible(IntPtr hWnd);
'@

# add signature as new type to PowerShell (for this session)
$User32 = Add-Type -MemberDefinition $User32Definition -Name User32 -PassThru

$maxLoops = 10; $loops = 0

do
{
    $outlookHandle = Get-Process OUTLOOK -ErrorAction SilentlyContinue

    if (-not $outlookHandle -and $autostartOutlook)
    {
        Write-Verbose "Starting OUTLOOK.EXE from $outlook"
        Start-Process $outlook
        Start-Sleep -Seconds 2
    }

    if ($outlookHandle)
    {
        $windowHandle = $outlookHandle.MainWindowHandle

        Write-Verbose "OUTLOOK.EXE is running..."

        if ($User32::IsWindowVisible($windowHandle))
        {
            Write-Verbose "OUTLOOK.EXE is visible... attempting to minimize..."

            $minimized = $User32::ShowWindowAsync($windowHandle, [ShowStates]::Minimized)

            Start-Sleep -Seconds 2

            if (-not $minimized)
            {
                Write-Verbose "Failed to minimize OUTLOOK.EXE... Outlook may still be starting..."
                $outlookHandle = $null
            }
            elseif (-not $User32::IsWindowVisible($windowHandle))
            {
                Write-Verbose "OUTLOOK.EXE is now minimized"
                break;
            }
        }
        else
        {
            Write-Verbose "OUTLOOK.EXE not visible..."
            break;
        }
    }

    Write-Verbose "Waiting for OUTLOOK.EXE to be ready, attempt: $loops of $maxLoops"

    $loops += 1
}
until ($outlookHandle -ne $null -or $loops -ge $maxLoops)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.