Тема: VBS:Поиск и активизация дочернего окна приложения с помощью vbs
Всем доброго дня, пытаюсь реализовать такую тему: вставка содержимого буфера обмена(путь до папки) в тело письма почтовой программы Thunderbird, в виде ссылки. На данный момент всё это дело я с горем пополам реализовал в виде 3-х скриптов, один из которых написан на AutoIt и представляет из себя одну строчку кода - WinActivate("Создание сообщения: - - Thunderbird", "").
Первый скрипт создаёт новое сообщение и вставляет в него ссылку
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run ("""C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe""")
WshShell.Run ("""R:\Recovery\ActivateWindow.au3""") ' запускаем скрипт на AutoIt, если окно с указанным Title существует - оно активируется, если нет - код продолжается
WScript.Sleep 1000
ctrlNeng = "^n"
ctrlNrus = "^т"
ctrlKeng = "^k"
ctrlKrus = "^л"
ctrlVeng = "^v"
ctrlVrus = "^м"
WshShell.SendKeys(ctrlNeng)
WshShell.SendKeys(ctrlNrus) ' создаём новое исходящее сообщение
WScript.Sleep 500
WshShell.SendKeys("{TAB}")
WScript.Sleep 500
WshShell.SendKeys("-") ' в поле Тема вставляем символ "-", так как он одинаковый на рус. и анг. раскладке
WScript.Sleep 500
WshShell.SendKeys("{TAB}")
WScript.Sleep 500
WshShell.SendKeys(ctrlKeng)
WshShell.SendKeys(ctrlKrus) ' имитируем нажатие на двух раскладках ctrll+K - открытие окна создания ссылки
WScript.Sleep 300
WshShell.SendKeys("{TAB}")
WshShell.SendKeys(ctrlVeng)
WshShell.SendKeys(ctrlVrus) ' вставляем содержимое буфера(путь до папки)
WScript.Sleep 300
WshShell.SendKeys("{TAB 4}") 'перемещаемся на кнопку ОК - завершение создания ссылки
WshShell.SendKeys("{ENTER}") 'подтверждаем нажатие кнопки ОК
WScript.Sleep 300
WshShell.SendKeys("{ENTER}") 'смещаемся на строчку вниз
Второй скрипт используется если нужно добавить ссылку в уже созданное сообщение(ссылка вставляется под предыдущей), для этого из основного вызывается скрипт на AutoIt
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run ("""C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe""")
WshShell.Run ("""R:\Recovery\ActivateWindow.au3""")
WScript.Sleep 1000
ctrlKeng = "^k"
ctrlKrus = "^л"
ctrlVeng = "^v"
ctrlVrus = "^м"
WshShell.SendKeys(ctrlKeng)
WshShell.SendKeys(ctrlKrus)
WScript.Sleep 300
WshShell.SendKeys("{TAB}")
WshShell.SendKeys(ctrlVeng)
WshShell.SendKeys(ctrlVrus)
WScript.Sleep 300
WshShell.SendKeys(ctrlVeng)
WshShell.SendKeys(ctrlVrus)
WScript.Sleep 300
WshShell.SendKeys("{TAB 4}")
WshShell.SendKeys("{ENTER}")
WScript.Sleep 300
WshShell.SendKeys("{ENTER}")
Проблема заключается в том, что необходимо обойтись без сторонних библиотек(т.е. без AutoIt) и добавить условие проверки существования уже созданного окна, дабы соединить 3 скрипта в один. Как активизировать окно нового сообщения? т.е. это процесс не основного приложения Thunderbird.exe, а его дочернее окно, замечу, что Title этого окна будет всегда одинаковым, так как создаётся программно. Пробовал активизировать нужное мне окно вот так, но это ни к чему не привело, похоже что ProcessID - в данном случае, это процесс основного окна!
Set WshShell = CreateObject("WScript.Shell")
Set WshExec = WshShell.Exec("""C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe""") ' запускаем почтовик
WScript.Sleep 2000
WshShell.SendKeys("^n") ' создаём новое сообщение
WScript.Sleep 500
PID = WshShell.AppActivate(WshExec.ProcessID) ' получаем ID процесса нужного окна
WshShell.Run("notepad") ' запускаем ради эксперимента окно блокнота поверх почтовика
If PID Then ' по идее эта строчка должна активизировать нужное окно по его ID
WshShell.SendKeys("^k") ' вызываем окно создания ссылки
Else
MsgBox "Что-то пошло не так!"
End if