HTA, глобальный список адресов Outlook, вывод на передний план

У меня есть приложение HTA, которое запускает глобальный список адресов (GAL) Outlook, чтобы пользователь мог легко выбрать получателя электронной почты из каталога нашей компании. Однако при запуске окно GAL не выводится на переднюю часть экрана. Он отображается за HTA.

Вот мой код Есть ли способ вывести GAL на передний план (или переместить HTA на задний план)?

<HEAD>

<!---------------Resize & Move Window------------------------------>

<script language="vbscript"> 
window.resizeto 400, 300
screenWidth = Document.ParentWindow.Screen.AvailWidth
screenHeight = Document.ParentWindow.Screen.AvailHeight
posLeft = (screenWidth - 400) / 2
posTop = (screenHeight - 300) / 2
window.moveTo posLeft, posTop
</script>

<!---------------Application Info---------------------------------->

  <TITLE>GAL Picker</TITLE>
  <HTA:APPLICATION ID="MyApp" 
    APPLICATIONNAME="My GAL Picker" 
    BORDER="Dialog"
    CAPTION="Yes"
    SCROLL="no"
    MAXIMIZEBUTTON="Yes"
    MINIMIZEBUTTON="Yes"
    SHOWINTASKBAR="yes"
    SINGLEINSTANCE="no"
    SYSMENU="Yes">
</HEAD>
<BODY>

<body STYLE="font:12 pt arial; color:white;
 filter:progid:DXImageTransform.Microsoft.Gradient
(GradientType=0, StartColorStr='#000000', EndColorStr='#0000FF')">

<SCRIPT LANGUAGE="VBScript">

'''''''''''''''''''''SUBS''''''''''''''''''''''''''''''''''''''''''''

Sub GALPicker
  Dim objWordApp
  Dim strEmailName

  Set objWordApp = CreateObject("Word.Application")
  strAddress = objWordApp.GetAddress(, "<PR_DISPLAY_NAME>", False, 1, 1, , True, True)

  If strAddress = "" Then
  Exit Sub
  Else
  End If

  msgbox strAddress
  MyGal.Value = strAddress

End Sub

</SCRIPT>


<H2>My Outlook GAL Picker</H2>
<P>Add Email Recipient:
<input type="text" name="MyGAL" size="30" onfocus="vbscript:Call GALPicker">

2 ответа

Решение

Вот пример использования AppActivate во втором сценарии, чтобы он не блокировал ваш основной сценарий.

В вашем основном скрипте:

' Call a second script (asynchronously) to activate the window...
CreateObject("WScript.Shell").Run "activate.vbs", 0, False

' Now load our GAL window...
strAddress = objWordApp.GetAddress(...)

Второй скрипт (activate.vbs) будет выглядеть так:

Set Shell = CreateObject("WScript.Shell")

' Try to activate the GAL window for 10 attempts/seconds...
For i = 1 To 10
    If Shell.AppActivate("Select Name") Then Exit For
    WScript.Sleep 1000
Next

Итак, мы запускаем второй скрипт, а затем продолжаем загрузку окна GAL "Select Name". Второй сценарий будет пытаться 10 раз (ожидая секунду между каждой попыткой), чтобы определить, может ли он найти окно "Выбор имени", и, если он это сделает, активирует его.

Это немного взломать, но это может сработать!

Для дальнейшего использования вот что я в итоге сделал...

    <HEAD>

    <!---------------Resize & Move Window------------------------------>

    <script language="vbscript"> 
    window.resizeto 460,255 
    screenWidth = Document.ParentWindow.Screen.AvailWidth
    screenHeight = Document.ParentWindow.Screen.AvailHeight
    posLeft = (screenWidth - 460) / 2
    posTop = (screenHeight - 255) / 2
    window.moveTo posLeft, posTop
    </script>

    <!---------------Application Info---------------------------------->

      <TITLE>GAL Picker</TITLE>
      <HTA:APPLICATION ID="MyApp" 
        APPLICATIONNAME="My GAL Picker" 
        BORDER="Dialog"
        CAPTION="Yes"
        SCROLL="no"
        MAXIMIZEBUTTON="Yes"
        MINIMIZEBUTTON="Yes"
        SHOWINTASKBAR="yes"
        SINGLEINSTANCE="no"
        SYSMENU="Yes">
    </HEAD>
    <BODY>

    <body STYLE="font:12 pt arial; color:white;
     filter:progid:DXImageTransform.Microsoft.Gradient
    (GradientType=0, StartColorStr='#000000', EndColorStr='#0000FF')">

    <SCRIPT LANGUAGE="VBScript">

    '''''''''''''''''''''SUBS''''''''''''''''''''''''''''''''''''''''''

  Sub GALPicker
  Dim objWordApp
  Dim strEmailName

  Set objWordApp = CreateObject("Word.Application")

'new line of code proviced by Bond, adjust file path as needed
CreateObject("WScript.Shell").Run "C:\Users\JohnDoe\Desktop\activate.vbs", 0, False

  strAddress = objWordApp.GetAddress(, "<PR_EMAIL_ADDRESS>" & " ### " & "<PR_DISPLAY_NAME>", False, 1, 1, , True, True)
  If strAddress = "" Then
  Exit Sub
  Else
  End If

  msgbox strAddress
  MyGal.Value = strAddress
  End Sub

    </SCRIPT>

    <H2>My Outlook GAL Picker</H2>

    <P>Add Email Recipient:
    <input type="text" name="testGAL" id= "MyGALTest" size="36" onfocus="vbscript:Call GALPicker">

Затем я создал новый файл.vbs согласно рекомендации Бонда...

Set Shell = CreateObject("WScript.Shell")

    ' Try to activate the GAL window for 10 attempts/seconds...
    For i = 1 To 10
        If Shell.AppActivate("Select Name") Then Exit For
        WScript.Sleep 100
    Next
Другие вопросы по тегам