|
DynamicWrapper на сервере х64 | ☑ | ||
---|---|---|---|---|
0
alf2006x
24.07.19
✎
01:42
|
Всем доброго дня.
Появилась необходимость использовать библиотеку dynwrap.dll Сложность оказалась в том, что на сервере стоит Win Server 2008 R2 (х64) Чтобы проверить работу библиотеки открыл пустой текстовый файл "test.vbs" написал в нём следующее: Dim dteWait Const WM_KEYDOWN = 256 Const WM_KEYUP = 257 Const VK_RETURN = 13 Set IE = CreateObject("InternetExplorer.Application") IE.Navigate("https://www.yandex.ru") ' пауза 5 секунд, чтобы прогрузилась страница dteWait = DateAdd("s", 5, Now()) Do Until (Now() > dteWait) Loop Set TextField = IE.document.getElementById("text") TextField.Value = "ума турман" IE.Document.ParentWindow.Focus() TextField.Focus() Set Wrap = CreateObject("DynamicWrapper") res = Wrap.Register("USER32.DLL", "PostMessage", "i=huhh") res = Wrap.Register("USER32.DLL", "FindWindowEx", "i=llsl", "f=s", "r=l") hWnd = Wrap.FindWindowEx(IE.hWnd, 0, "Frame Tab", 0) hWnd = Wrap.FindWindowEx(hWnd, 0, "TabWindowClass", 0) hWnd = Wrap.FindWindowEx(hWnd, 0, "Shell DocObject View", 0) hWnd = Wrap.FindWindowEx(hWnd, 0, "Internet Explorer_Server", 0) res = Wrap.PostMessage(hwnd, WM_KEYDOWN, VK_RETURN, 1) res = Wrap.PostMessage(hwnd, WM_KEYUP, VK_RETURN, 1) IE.Visible = true MsgBox hwnd Суть скрипта в том, чтобы запустить IE, перейти на страницу http://www.yandex.ru, в поле поиска набрать текст ("ума турман"), сфокусироваться на этом поле, найти вложенное окно класса Internet Explorer_Server и нажать туда Enter. По истечении времени выполнения запроса получить результат поиска. Сразу оговорюсь, что клик на кнопку "Найти" мне не нужен. Для моей задачи нужен именно Enter в дочернее окно IE. Просто такая особенность задачи. Яндекс здесь исключительно для примера. Попытка запустить этот скрипт непосредственно двойным кликом по файлу приводит к сообщению об ошибке: Строка: 22 Символ: 1 Ошибка: НЕвозможно создание объекта контейнером ActiveX: 'DynamicWrapper' Код: 800A01AD При этом, всё выполняется абсолютно корректно (от начала и до конца), если запускать файл со скриптом из cmd следующим образом: C:\Windows\SysWOW64>wscript C:\Users\1c\Desktop\test.vbs Аналогичный код в 1С соответственно также не выполняется по причине появления такой ошибки: {ВнешняяОбработка.Amadeus.Форма.Форма.Форма(108)}: Ошибка при вызове конструктора (COMОбъект) Wrap = Новый COMОбъект("DynamicWrapper"); по причине: -2147221164(0x80040154): Класс не зарегистрирован Я конечно могу в 1С собирать текст нужного мне скрипта, записывать его в файл и запускать на выполнение с ожиданием окончания. Но как-то это не по человечьи. Отлаживать очень неудобно и т.п. Подскажите, как заставить работать библиотеку (явно х32) на сервере х64? |
|||
1
МихаилМ
24.07.19
✎
01:54
|
||||
2
Лефмихалыч
24.07.19
✎
07:32
|
(0) WScript.Sleep 5000 - вот это "подождать 5 секунд", а не то, что у тебя там.
а чем это сотонинство выгодно отличается от обычного http-запроса и разбора ответа? |
|||
3
alf2006x
24.07.19
✎
09:42
|
(2) Целевой ресурс (НЕ Яндекс) зело заколдован. Поэтому такой бубен.
HTTP запрос пробовал и был жестоко забанен. |
|||
4
alf2006x
24.07.19
✎
10:47
|
(1) Я даже больше скажу. Пробовал сделать бубен отсюда: http://catalog.mista.ru/public/195820/
В результате в 1С Новый COMОбъект создается, методы отправляются на выполнение, но результат в ответ не приходит. Каждый hWnd возвращается с нулём. Это наверное объяснимо, так как при регистрации приложения COM+ (из уже зарегистрированной библиотеки) она меня предупреждала, что нет гарантий, что методы и свойства будут работать. А способ регистрации непосредственно самой dll почему-то не срабатывает. Выбираю ДЛЛ, а кнопка Далее остаётся серой (без объяснения причин). |
|||
5
oleg_km
24.07.19
✎
17:01
|
(3) Ну надо просто более тщательно прикинуться браузером, посмотреть в трассировке нужные заголовки и последовательность запросов
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |