有没有一种方法可以在登录时自动启动Outlook,但是将其最小化到系统任务栏(通知区域)?启动PC时,我不希望我的收件箱露面,只有收到新邮件时才显示离散通知。
如果这很重要,我正在使用Outlook 2003。
有没有一种方法可以在登录时自动启动Outlook,但是将其最小化到系统任务栏(通知区域)?启动PC时,我不希望我的收件箱露面,只有收到新邮件时才显示离散通知。
如果这很重要,我正在使用Outlook 2003。
Answers:
我知道这个线程有些旧;但是,通过网络搜索可以找到许多有关此问题的信息,而我一直找不到能够提供有效解决方案的解决方案。无论出于何种原因,都不能在所有情况下都正常解决此问题。
创建一个新的文本文件并插入以下代码。
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
重要!确保进行更改PATH_TO_OUTLOOK
以反映安装的实际位置。
.vbs
扩展名,以强制Windows将其识别为VBScript。除了在启动文件夹中放置脚本或脚本的快捷方式外,还可以编辑注册表,以便在登录时立即运行脚本。
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
。HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Outlook\Preference\MinToTray
到注册表用的值为1
Outlook没有为此的内置功能,但是您可以使用以下start
命令:
在“启动”文件夹中创建一个指向执行命令的快捷方式
cmd /c start /min "" "FullPathOfOutlook.exe"
或包含命令的批处理文件
@start /min "" "FullPathOfOutlook.exe"
右键单击任务栏图标,然后选中最小化时隐藏。
start
经常使用以最小化许多启动应用程序,并且可以与所有这些应用程序一起使用。
start /min "" "C:\Program Files\Microsoft Office\OFFICE11\OUTLOOK.exe"
在Startup文件夹中使用了一个批处理文件,并且在登录时它的打开最小化。我对Win7 / Outlook 2010进行了相同的操作,只是路径不同。
如果您可以通过键入从命令行打开Outlook outlook.exe
,则可以创建一个包含此代码的批处理文件 start /b /min outlook.exe
,并将其放在Windows启动文件夹中。
在带有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"
吗?
我花了相当长的时间使用以上代码,并感谢所有以前的贡献者分享他们的工作/改进/建议。但是,最近,当我将其与Windows 10(64位)和Outlook 2016(64位)结合使用时,遇到了两个不受欢迎的问题:
系统任务栏中的Outlook图标显示一个'cog'叠加层,并显示消息“另一个程序正在使用Outlook。要断开程序并退出Outlook,请单击Outlook图标,然后单击立即退出”。
尝试从“打开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.
我喜欢最重要的答案,但我不喜欢它在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)