web-dev-qa-db-ja.com

トレイでOutlookを自動的に起動する

ログイン時にOutlookを自動的に起動する方法はありますが、システムトレイ(通知領域)に最小化されていますか? PCを起動したときに自分の受信トレイを顔に表示したくありません。新着メールが到着したときの個別の通知のみです。

必要に応じて、Outlook 2003を使用しています。

11
kinokijuf

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. Windowsに強制的にVBScriptとして認識させるために、.vbs拡張子を付けてテキストファイルの名前を任意に変更します。

オプション:

  1. スクリプトを好きな場所に保存します。
  2. スクリプトへのショートカットを作成し、代わりにスタートアップフォルダーに配置します。
  3. ショートカットを右クリックして、プロパティを選択します。
  4. アイコンの変更ボタンを使用して、Outlook実行可能ファイルの場所を参照し、実行可能ファイル内に保存されているOutlookアイコンを選択します。

パフォーマンスの向上:

スクリプトまたはスクリプトへのショートカットをスタートアップフォルダーに配置する代わりに、レジストリを編集して、ログイン時にスクリプトをすぐに実行できます。

  1. 上記のSolutionセクションのステップ1〜4に従います。
  2. スクリプトを好きな場所に配置します。
  3. レジストリキーHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Runに、必要に応じて新しいString Valueまたは新しいExpandable String Valueを追加します。
  4. 好きな名前を付けてください。
  5. スクリプトへのパスを使用して、作成した新しい値を変更します。
15
Jason

Outlookにはこの機能が組み込まれていませんが、 start コマンドを使用できます。

  1. コマンドを実行するショートカットをスタートアップフォルダーに作成します

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

    またはコマンドを含むバッチファイル

    @start /min "" "FullPathOfOutlook.exe"
    
  2. トレイアイコンを右クリックして、最小化時に非表示をオンにします。

7
Dennis

コマンドラインからOutlook.exeと入力してOutlookを開くことができる場合は、このコードstart /b /min Outlook.exeを含むバッチファイルを作成し、Windowsスタートアップフォルダーに配置します。

私はいくつかの検索とテストを行い、ついに次の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
Aerix Chan

一番上の答えは好きですが、CScriptにあるのは好きではありません... PowerShellで作成しました...

Windows 10およびOffice 365で問題なく動作します。

ここでフォーマットされた色: https://Gist.github.com/NotoriousPyro/d30a96d2a89cf783ef3081b13d4816a

<#
.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)
0
NotoriousPyro

上記のコードをかなり長い間使用してきましたが、以前のすべての貢献者が作業/改善点/提案を共有してくれたことに感謝します。しかし最近、Windows 10(64ビット)およびOutlook 2016(64ビット)と組み合わせて使用​​したときに、2つの望ましくないいらいらする問題が発生しました。

  1. システムトレイのOutlookアイコンに「cog」オーバーレイが表示され、「別のプログラムがOutlookを使用しています。プログラムを切断してOutlookを終了するには、Outlookアイコンをクリックして、[今すぐ終了]をクリックしてください」と表示されます。

  2. [Outlookを開く]コンテキストメニュー(トレイのOutlookアイコンを右クリック)アイテムからOutlookを開こうとすると、ダイアログボックスが表示され、「アクティブなExplorerオブジェクトが見つかりません」と報告されます。応答で[OK]オプションをクリックすると、Outlookが起動します(ただし、問題1-歯車オーバーレイ)が残ります。

上記の問題を解決するために、元のポスターの目的(自分の要件を反映している)を満たすためにコンパイルできる同様のコードを見つけることに取り掛かりました。

以下のコードは、他のスーパーユーザーの幅広い利益のために「現状のまま」提供されていますが、2つのW10 64ビットシステム(どちらも64ビットOfficeがインストールされている)でコードをテストしましたが、まだRunTimeを解決していることに注意してください1つのシステムの問題。他は完璧に機能します。詳細については、必要に応じてこちらで確認できます: 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アドオン-上記の元の投稿で概説されている要件に従って問題なく機能します。

**更なる更新** 2番目の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
PC Pilot

Outlook 2010を搭載したWindows 7でSTARTコマンドで引用符を使用すると、新しいコマンドウィンドウが開きますが、Outlookは起動しません。これは、32ビットバージョンのWindows 7 ProおよびEnterpriseエディションで発生します(どちらも最新のアップデートが適用されています)。 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はこれらのコマンドラインでは必要ないことに注意してください。

0
Klaralina