11 votes

Démarrer Outlook automatiquement dans la zone de notification

Y a-t-il un moyen de démarrer Outlook automatiquement à la connexion, mais réduit dans la zone de notification (tray système) ? Je ne veux pas que ma boîte de réception s'affiche en plein écran lorsque je démarre mon PC, juste une notification discrète lorsque de nouveaux mails arrivent.

Je suis sous Outlook 2003, si ça a de l'importance.

0voto

Aerix Chan Points 1

J'ai fait des recherches et des tests et j'ai finalement découvert que le code vbscript suivant fonctionnait sur mon ordinateur portable Win10 :

set shell = createobject("wscript.Shell")
shell.run "outlook.exe", 7, False     '... SH_SHOWMINNOACTIVE=7 "devrait" fonctionner
shell.sendkeys "% n"     ' ... Minimiser Alt Espace Barre - n

Il suffit de le définir comme une action dans le Planificateur de tâches, et de le faire comme vous le feriez pour une application au démarrage.

0voto

NotoriousPyro Points 101

J'aime la réponse principale, mais je n'aime pas qu'elle soit en CScript... Alors je l'ai faite en PowerShell...

Cela fonctionne parfaitement avec Windows 10 et Office 365.

Formatté en couleur ici : https://gist.github.com/NotoriousPyro/d30a96d2a89cf783ef3081b13d4816a0

<#
.Synopsis

Trouve automatiquement, exécute et place Outlook dans la barre système.

.Description

Trouve automatiquement, exécute et place Outlook dans la barre système.
Par défaut, Outlook démarrera en plein écran même lorsque vous avez activé l'option de minimisation dans la barre et que vous démarrez l'application en mode réduit.

Cela nécessite que l'icône de la barre OUTLOOK.EXE soit activée et que l'option de minimisation dans la barre soit activée.

Auteur : 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);
'@

# ajouter la signature comme nouveau type à PowerShell (pour cette 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)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X