Outlook Inspector Activate不会带来前景
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Outlook Inspector Activate不会带来前景相关的知识,希望对你有一定的参考价值。
我有一个PowerShell脚本,搜索电子邮件然后打开它
一旦我有MailItem对象,我得到他的检查员与MailItem.GetInspector然后我尝试在前景显示邮件由于Inspector.Display和Inspector.Activate。 Activate方法的doc说:
通过将检查器窗口置于前台并设置键盘焦点来激活它。
但是Activate不起作用,邮件是打开的,但是它保留在后台,它不在前台。我不知道也不知道为什么。
我的PowerShell脚本:
param(
[string] $Subject,
[string] $Path
)
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8;
Add-type -assembly "Microsoft.Office.Interop.Outlook" | out-null
$olFolders = "Microsoft.Office.Interop.Outlook.olDefaultFolders" -as [type]
$outlook = new-object -comobject outlook.application
$namespace = $outlook.GetNameSpace("MAPI")
$subfolder = $Path.Split('/')
$folder = $namespace.Folders($subfolder[1])
for($i=2; $i -lt $subfolder.Length; $i++) {
$folder = $folder.Folders($subfolder[$i])
}
$filter = "@SQL=urn:schemas:httpmail:subject LIKE '%"+$Subject+"%'"
$mail = $folder.items.find($filter)
$inspector = $mail.GetInspector
$inspector.Display()
$inspector.Activate()
我只尝试$inspector.Display()
或inspector.Activate()
,但结果是一样的,窗口显示,但留在后台。
谢谢你的帮助 !!
Windows不会让后台进程(例如outlook.exe)设置前台窗口 - 请记住,即使您的进程可能位于前台,该调用也会被编组到outlook.exe地址空间中,它会执行它。
要解决此问题,您需要使用AttachThreadInput()Windows API函数将当前前景窗口附加到您的线程,但您无法从PS调用它。
如果使用Redemption是一个选项(我是它的作者),它会暴露SafeInspector.Active
方法,无论outlook还是你的进程都在后台,它都会起作用。在VBS中:
Set sInspector = CreateObject("Redemption.SafeInspector")
sInspector.Item = inspector
sInspector.Activate
经过更多的研究和测试,它似乎是非常随机的,有时邮件在前台,有时它留在后台,但当Outlook(软)打开时,它总是在前台开放,但我找不到办法总是在前台打开它
以上是关于Outlook Inspector Activate不会带来前景的主要内容,如果未能解决你的问题,请参考以下文章
unity中的inspector关闭之后,怎么再找出来?在线急