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)