Всплывающее окно в MSHTML - PullRequest
0 голосов
/ 30 июля 2011

Я работаю над приложением для веб-автоматизации.

Все работает нормально. Теперь я застрял в проблеме.

Когда пользователь щелкает ссылку, открывается новое всплывающее окно с полями ввода и кнопкой

Заполните поля пользователя и нажмите кнопку.

Я хочу автоматизировать это, но проблема в том, что когда я нажимаю на ссылку и отображается всплывающее окно, событие Document_Completed не запускается.

И поэтому я не могу разобрать этот всплывающий HTML-файл и автоматизировать его.

Есть ли у кого-нибудь полезные советы?

Ответы [ 2 ]

1 голос
/ 09 января 2012

Это очень сложно. Я сам работал над чем-то похожим. Сначала вы должны проверить, является ли диалоговое окно Javascript или это окно сообщений. С помощью диалогового окна JavaScript вы можете попробовать это: http://msdn.microsoft.com/en-us/magazine/gg309183.aspx. Он также может работать с системным диалогом, но не подходит для этого, по мнению автора. Если вы не можете сделать это, вам придется копать глубоко и попытаться манипулировать через Win32Api, насколько я могу судить.

Системные диалоги не являются частью DOM, которую вы обычно используете для этого типа автоматизации. Он не имеет идентификатора и работает в отдельном цикле от остальной части операционной системы (на очень низком уровне он специально отделен от всего). Для дальнейшего понимания диалогов и того, как они работают в Windows, проверьте это: http://www.winprog.org/tutorial/dialogs.html

У меня нет полного решения этого вопроса, но я работаю над этим.

0 голосов
/ 24 июля 2013

Дескриптор всплывающего окна можно получить с помощью функции WindowFromPoint. Тогда вы можете использовать IAccessible интерфейс для доступа к элементам всплывающего окна. Примерно так:

const uint OBJID_NATIVEOM = 0;
Guid  IID_IAcce = new Guid("{618736e0-3c3d-11cf-810c-00aa00389b71}");

IntPtr inpt = WindowFromPoint( p);

object ptr1 = null;
int l;

l = AccessibleObjectFromWindow(inpt, OBJID_NATIVEOM,    IID_IAcce.ToByteArray(), ref ptr1);
var acc = ptr1 as IAccessible;
...