Запустите Outlook автоматически в трее

11

Есть ли способ автоматически запустить Outlook при входе в систему, но свернуть в системный трей (область уведомлений)? Я не хочу, чтобы мой почтовый ящик показывал мне в лицо, когда я запускаю свой компьютер, только отдельное уведомление, когда приходит новая почта.

Я использую Outlook 2003, если это имеет значение.

kinokijuf
источник
1
Взгляните на эту статью: support.microsoft.com/kb/251340
Reorx
@Reorx ответь на этот вопрос
kinokijuf

Ответы:

15

Outlook 2010 (x86) в Windows 7 (x64): запуск и сворачивание в системный трей при запуске

Я знаю, что эта тема несколько старая; Тем не менее, поиск в сети выявляет многочисленные учетные записи этой проблемы, и я не смог найти тот, который обеспечивает рабочее решение. По какой-то причине нормальные решения этой проблемы не работают во всех случаях.

Проблема:

  • При первом входе в систему значок 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.
Nate
Когда я запускаю этот скрипт вручную из папки «Автозагрузка», он запускается свернутым, но значок Outlook застрял на моей панели задач. Я хотел бы это только в моем подносе. Когда я активирую Outlook с помощью значка на панели задач, а затем свернул его, он перешел в трей и покинул панель задач, как и ожидалось.
Rolandow
@rolandow Проблема с иконкой, оставшейся на панели задач, упоминается в первой части описания проблемы. Если это не работает правильно, это, скорее всего, проблема синхронизации. Я обнаружил, что добавление его в реестр, как предлагается, обычно решает любые проблемы синхронизации из-за того, как windows выполняет элементы во время запуска. Другая вещь, которую вы можете попробовать, это изменить значение Wscript.Sleep (XXX).
Джейсон
7

В Outlook нет встроенной функции для этого, но вы можете использовать startкоманду:

  1. Создайте ярлык в папке «Автозагрузка», указывающий, что выполняет команду

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

    или командный файл, содержащий команду

    @start /min "" "FullPathOfOutlook.exe"
    
  2. Щелкните правой кнопкой мыши значок в трее и установите флажок Скрыть при сворачивании .

Деннис
источник
Не работает. Outlook по-прежнему начинается в максимальном размере
kinokijuf
Возможно я не был ясен. Я использую вышеупомянутый метод (с командным файлом) на моем компьютере. Оно работает.
Деннис
Какая версия Outlook у вас есть?
kinokijuf
Outlook 2007, но это не должно иметь значения. Я использую, startчтобы минимизировать многие запускаемые приложения, и это работает со всеми из них.
Деннис
Я могу подтвердить, что говорит Деннис. На моей машине XP с Outlook 2003 я использую start /min "" "C:\Program Files\Microsoft Office\OFFICE11\OUTLOOK.exe"пакетный файл в папке «Автозагрузка», и он открывается в свернутом виде при входе в систему. Я делаю то же самое с Win7 / Outlook 2010, но просто по другому пути.
jb11
0

если вы можете открыть Outlook из командной строки, набрав outlook.exe, затем создайте пакетный файл, включающий этот код, start /b /min outlook.exeи поместите его в папку автозагрузки Windows.

Рэндзю Чандран Чингат
источник
0

При использовании кавычек с командой START в Windows 7 с Outlook 2010 открывается новое командное окно, но Outlook не запускается. Это происходит с 32-разрядными версиями Windows 7 Pro и Enterprise (обе с последними обновлениями). Я не могу сказать, случается ли это с 64-битными версиями или другими выпусками.

Чтобы решить эту проблему, вы должны опустить любые кавычки, которые окружают «путь \ программу», который вы хотите запустить с помощью команды START. Однако, поскольку в имени пути обычно есть пробелы, вы, скорее всего, получите другую ошибку, если не урезать путь (сократить его). Сокращенные имена в пути могут отличаться, если у вас установлено несколько продуктов 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. Также обратите внимание, что в этих командных строках не требуется .exe в конце Outlook.exe.

Klaralina
источник
Есть ли какая-то причина, почему вы думаете, что это лучше, чем start /min "" "FullPathOfOutlook.exe"?
Скотт
0

Я использовал приведенный выше код в течение некоторого значительного времени и хотел бы поблагодарить всех предыдущих авторов за то, что они поделились своей работой / улучшениями / предложениями Однако в последнее время у меня возникли две нежелательные и раздражающие проблемы при использовании его в сочетании с Windows 10 (64-разрядная версия) и Outlook 2016 (64-разрядная версия):

  1. Значок Outlook в системном трее отображает наложение «cog» с сообщением «Другая программа использует Outlook. Чтобы отключить программы и выйти из Outlook, щелкните значок Outlook, а затем нажмите« Выйти сейчас ».

  2. При попытке открыть Outlook из контекстного меню «Открыть Outlook» (щелкните правой кнопкой мыши значок Outlook на панели задач) появляется диалоговое окно с сообщением «Не найден активный объект проводника». Нажатие на кнопку «ОК» в ответ запускает Outlook (хотя проблема 1 - наложение Cog) остается.

Чтобы решить вышеупомянутые проблемы, я решил найти похожий код, который я мог бы скомпилировать для достижения желаемых целей исходного постера (который отражает мои собственные требования).

Приведенный ниже код предлагается "как есть" для более широкого использования других суперпользователей, важно отметить, что хотя я тестировал код на двух 64-битных системах W10 (обе с установленным 64-битным Office), я все еще должен разрешить RunTime выпуск одной системы. Другие функции без нареканий. Полную информацию можно посмотреть здесь, если требуется: /programming/45533261/start-outlook-2016-64-bit-automatics-minimised-to-windows-10-64-bit-syste

Я буду держать вас в курсе любых событий, так как тестирование продолжается .......

** Быстрое обновление ** Теперь протестировано на ноутбуке HP Elitebook 8440P - Windows 10 Pro 64 Bit с Office 64 Bit + те же 12 расширений Outlook - функционирует безупречно в соответствии с требованиями, изложенными в оригинальном сообщении выше .....

** Дальнейшее обновление ** Протестировано на втором ноутбуке HP Elitebook 8440P - Windows 10 Pro 64 Bit с Office 64 Bit + те же 12 расширений Outlook - снова возникла ошибка RunTime :(

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

Просто установите его как действие в планировщике задач и сделайте так, как вы запускаете приложение.

Аерикс Чан
источник
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)
NotoriousPyro
источник