Outlook Inspector Activate不会带来前景

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Outlook Inspector Activate不会带来前景相关的知识,希望对你有一定的参考价值。

我有一个PowerShell脚本,搜索电子邮件然后打开它

一旦我有MailItem对象,我得到他的检查员与MailItem.GetInspector然后我尝试在前景显示邮件由于Inspector.DisplayInspector.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关闭之后,怎么再找出来?在线急

node-inspector调试工具

unity, inspector listview

mac appium inspector的record功能怎么用

Unity2.7 检视器(Inspector)

使用node-inspector调试nodejs程序<nodejs>