Програмно нажать на IID_IHTMLButtonElement
От: Mansell Литва  
Дата: 04.01.05 14:11
Оценка:
Здравствуйте , господа !

Бьюсь над следующим :

if ( SUCCEEDED ( iDisp -> QueryInterface ( IID_IHTMLButtonElement, ( LPVOID* )&pInputButton )) && pInputButton )

{

...
...

}
Все просто замечательно — но вот как програмно нажать на pInputButton ?

Заранее благодарен .
Согласие есть продукт при полном непротивлении сторон...
Re: Програмно нажать на IID_IHTMLButtonElement
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 04.01.05 14:22
Оценка:
Здравствуйте, Mansell, Вы писали:

M>Бьюсь над следующим :


M> if ( SUCCEEDED ( iDisp -> QueryInterface ( IID_IHTMLButtonElement, ( LPVOID* )&pInputButton )) && pInputButton )

M>Все просто замечательно — но вот как програмно нажать на pInputButton ?

Надо запросить интерфейс IHTMLElement и вызвать метод click. Все просто и биться не надо
Re[2]: Програмно нажать на IID_IHTMLButtonElement
От: Mansell Литва  
Дата: 04.01.05 15:13
Оценка:
Здравствуйте, Flamer, Вы писали:

F>Здравствуйте, Mansell, Вы писали:


M>>Бьюсь над следующим :


M>> if ( SUCCEEDED ( iDisp -> QueryInterface ( IID_IHTMLButtonElement, ( LPVOID* )&pInputButton )) && pInputButton )

M>>Все просто замечательно — но вот как програмно нажать на pInputButton ?

F>Надо запросить интерфейс IHTMLElement и вызвать метод click. Все просто и биться не надо




Огромное спасибо за внимание — но вот беда :

IDispatch *iDisp = NULL;
IHTMLElement *pTarget=NULL;
IHTMLButtonElement *pInputButton = NULL;
WideString tt;
HRESULT hResult;

hResult=pAll->item(index,index,&iDisp);


if ( SUCCEEDED ( iDisp -> QueryInterface ( IID_IHTMLButtonElement, ( LPVOID* )&pInputButton )) && pInputButton )

{

pInputButton->get_value(&tt);
if (tt="Login")
if ( SUCCEEDED ( iDisp->QueryInterface ( IID_IHTMLElement, ( LPVOID* )&pInputButton )) && pTarget )
pTarget->click();


}


вызывает исключение "Access violation ...." . Может я сьел чего — нибудь не того ?
Согласие есть продукт при полном непротивлении сторон...
Re[3]: Програмно нажать на IID_IHTMLButtonElement
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 04.01.05 15:20
Оценка: 3 (1)
Здравствуйте, Mansell, Вы писали:

[]

1. Не оверквотьте.
2. Есть теги для оформления кода
3. Вы неправильно работаете с BSTR.
4. Вместо оператора сравнения == поюзан оператор присваивания =
5. Есть утечки интерфейсов — делаете QueryInterface, затем не видно вызова Release.
6. Исправления в коде ниже (не все исправления ).


M>Огромное спасибо за внимание — но вот беда :



IDispatch *iDisp = NULL;
IHTMLElement *pTarget=NULL;
IHTMLButtonElement *pInputButton = NULL;
WideString tt;
HRESULT hResult;

hResult=pAll->item(index,index,&iDisp);


if ( SUCCEEDED( iDisp -> QueryInterface ( IID_IHTMLButtonElement,(LPVOID* )&pInputButton )) 
&& pInputButton )

{
BSTR bStr;
hResult = pInputButton->get_value(&bStr);
if(SUCCEEDED(hResult))
{
 tt = bStr;
 SysFreeString(bStr);
}


if (tt=="Login") // у вас был оператор присваивания
if ( SUCCEEDED ( iDisp->QueryInterface ( IID_IHTMLElement, ( LPVOID* )&pInputButton )) && pTarget )
pTarget->click();


}


Примерно так, в общем.
Re[4]: Програмно нажать на IID_IHTMLButtonElement
От: Mansell Литва  
Дата: 04.01.05 16:02
Оценка:
Здравствуйте, Flamer.

Моим благодарностям просто нет границ в пределах разумного . Действительно , пара — тройка жирных багов
затесалась в код — но благодаря Вашим усилиям все они были ликвидированы . Большое спасибо за подсказку нужного направления . Извиняюсь за скромность — не будете ли настолько любезны просветить меня еще в одном важном вопросе :

Имеется документ с фреймами — как добраться до всего , что находится в этих фреймах (Button , Input и т.д ).
Я подразумеваю аналог Jscript setFrame();. Был бы весьма благодарен за подсказку .
Согласие есть продукт при полном непротивлении сторон...
Re[5]: Програмно нажать на IID_IHTMLButtonElement
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 04.01.05 16:54
Оценка:
Здравствуйте, Mansell, Вы писали:

[]

M>Имеется документ с фреймами — как добраться до всего , что находится в этих фреймах (Button , Input и т.д ).

M>Я подразумеваю аналог Jscript setFrame();. Был бы весьма благодарен за подсказку .

Буду краток: на сайте есть проект RSDN Bar: http://www.rsdn.ru/article/files/Progs/rsdnbar.xml
Автор(ы): Порохня Дмитрий aka Flamer
Дата: 12.07.2003
Я когда-то давно его писал, так вот — оттуда можно выцепить, как добраться до документа в каждом фрейме (в указанном проекте это код по подсветке слова). Думаю, поможет.
Re[5]: Програмно нажать на IID_IHTMLButtonElement
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 04.01.05 16:58
Оценка:
Здравствуйте, Mansell, Вы писали:

[]

Кстати, вдогонку — вы случайно не заполнялку форм пишите ? У меня есть один старый проект, который заполняет формы очень прилично. Дабы не оффтопить: если вопрос интересен — мыло в профайле.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.