Outlook Inspector Activate не выводит на передний план - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть сценарий PowerShell, который ищет письмо, а затем открывает его

Как только у меня есть объект MailItem , я получаю его инспектор с MailItem.GetInspector и затем я пытаюсь отобразить почту на переднем плане благодаря Inspector.Display и Inspector.Activate .Документ для метода Activate гласит:

Активирует окно инспектора, выводя его на передний план и устанавливая фокус клавиатуры.

Но 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(), но результат тот же, окно отображается, но остается в фоновом режиме.

Спасибо за вашу помощь !!

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

После дополнительных исследований и тестирования, это кажется очень случайным, иногда почта находится на переднем плане, иногда она остается в фоновом режиме, но когда Outlook (софт) открыт, он всегда открывается на переднем плане, но я ненайти способ всегда открывать его на переднем плане

0 голосов
/ 23 февраля 2019

Windows не позволяет фоновому процессу (например, outlook.exe) установить окно переднего плана - имейте в виду, что даже если ваш процесс может быть на переднем плане, вызов перенаправляется в адресное пространство outlook.exe, котороеочередь исполняет это.

Чтобы обойти это, вам нужно прикрепить текущее переднее окно к вашему потоку с помощью функции API-интерфейса AttachThreadInput () Windows, но вы не можете вызвать его из PS.

При использовании Погашение - это опция (я ее автор), она предоставляет метод SafeInspector . Active, который будет работать вне зависимости от того, работает ли outlook или ваш процесс в фоновом режиме.В VBS:

  Set sInspector = CreateObject("Redemption.SafeInspector")
  sInspector.Item = inspector
  sInspector.Activate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...