| 
| 
 | Вопрос # 5 525/ вопрос открыт / | 
 |  Здравствуйте!Пишу программу,которая будет взаимодействовать с веб страницей. Компонент webbrowser загружает страницу, и нужно сэмулировать нажатие кнопки таб. но тут возникает проблема, такое ощущение что страница после каждого вызова загружатся заново и результата никакого. пробовал поставить edit, с ним работает эмуляция. У кого нибудь есть какие нибудь преположения. Еще вот что, окно будет неактывным и вообще скрытым.
 Благодарю за помощь.
 Приложение:Переключить в обычный режим procedure EmulateKey(Wnd: HWND; VKey: Integer);asm   push 0   push edx   push 0101H //WM_KEYUP   push eax   push 0   push edx   push 0100H //WM_KEYDOWN   push eax   call PostMessage   call PostMessageend;  EmulateKey(WebBrowser1.Handle, VK_TAB);
|  |   Вопрос задал: KilkaMS (статус: Посетитель)Вопрос отправлен: 25 июля 2011, 18:33
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 15; последнее сообщение — 26 июля 2011, 17:53; участников в обсуждении: 3. 
|   | Вадим К (статус: Академик), 25 июля 2011, 19:05 [#1]:а зачем то код на ассемблере? так ведь понятнее и красивее. 
 procedure EmulateKey(Wnd: HWND; VKey: Integer);
begin
   PostMessage(wnd, WM_KEYDOWN, VKey,0);
   PostMessage(wnd, WM_KEYUP, VKey,0);
end; Кнопка таб нажимается для чего? не для флеша на странице? или просто для перехода между полями? есть много способов, как это сделать проще.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | KilkaMS (статус: Посетитель), 25 июля 2011, 20:02 [#2]:через PostMessage не получалось, для перехода между полями, поделитесь этими способами |  
|   | Вадим К (статус: Академик), 25 июля 2011, 22:05 [#3]:а попробуйте использовать sendmessage. Параметры такие же. Но только исключительно sendmessage. Галочка "подтверждения прочтения" - вселенское зло. |  
|   | KilkaMS (статус: Посетитель), 26 июля 2011, 08:08 [#4]:может я не туда посылаю? SendMessage(WebBrowser1.handle, WM_KEYDOWN, VK_TAB,0);
 SendMessage(WebBrowser1.handle, WM_KEYUP, VK_TAB,0);
 
 проблема такаяже, как будто обновляется страница, и если нажимаю несколько раз на таб остается на том месте, куда после первого нажатия попала
 |  
|   | min@y™ (статус: Доктор наук), 26 июля 2011, 08:14 [#5]:А зачем всё это делать в скрытом окне? Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | KilkaMS (статус: Посетитель), 26 июля 2011, 08:38 [#6]:потому что программа будет работать в скрытом режиме, окно не будет отображено |  
|   | min@y™ (статус: Доктор наук), 26 июля 2011, 08:56 [#7]: Цитата (KilkaMS): потому что Ответ на вопрос "зачем" нужно начинать со слов "для того, чтобы...". Это важно.
 
 Цитата (KilkaMS): программа будет работать в скрытом режиме, окно не будет отображено  Зачем TWebBrowser в скрытом окне?
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | KilkaMS (статус: Посетитель), 26 июля 2011, 09:05 [#8]:а какие еще варианты есть? мне нужно совершить некие манипуляции на веб странице, поставить несколько галочек, нажать на кнопочку. |  
|   | min@y™ (статус: Доктор наук), 26 июля 2011, 09:12 [#9]: Цитата (KilkaMS): мне нужно совершить некие манипуляции на веб странице, поставить несколько галочек, нажать на кнопочку.  Надо просто составить нужный POST-запрос и отправить серверу. Нахрена городить TWebBrowser на скрытом окне-то? Да ещё эмулировать нажатие клавиш... Есть же модуль winsock.pas, есть компоненты Indy, есть компоненты ICS и т.п.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | KilkaMS (статус: Посетитель), 26 июля 2011, 09:59 [#10]:а можно пример использования? |  
|   | min@y™ (статус: Доктор наук), 26 июля 2011, 10:20 [#11]: Цитата (KilkaMS): а можно пример использования?  У меня нету. Поспрашай тут у народа. А лучше - погугли.
 Для начала найди, скачай и поставь сниффер.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | KilkaMS (статус: Посетитель), 26 июля 2011, 16:54 [#12]:немного погугля наткнулся на WebBrowser1.OleObject.Document.Example_box.checked
 такой пример.
 часть моего нтмл кода
 </H3></TD>
 <TD valign="top" class="ms-formbody" width="400px">
 <!-- FieldName="SMS"
 FieldInternalName="SMS"
 FieldType="SPFieldBoolean"
 -->
 <span dir="none">
 <input id="ctl00_m_g_bcb7e20a_5c6b_4d9b_b614_de038e953e74_ctl00_ctl04_ctl01_ctl00_ctl00_ctl04_ctl00_ctl00_BooleanField" type="checkbox" name="ctl00$m$g_bcb7e20a_5c6b_4d9b_b614_de038e953e74$ctl00$ctl04$ctl01$ctl00$ctl00$ctl04$ctl00$ctl00$BooleanField" /><br>
 </span>
 
 
 как я понял имя SMS нужно поставить. но чтото не очень получилось выполнить эту процедуру ктонибудь пользовался подбным методом уже?
 |  
|   | KilkaMS (статус: Посетитель), 26 июля 2011, 17:00 [#13]:сделал так ovElements := WebBrowser1.OleObject.Document.Forms.Item( 0 ).Elements;
 for i := 0 to ( ovElements.Length-1 ) do
 if ( AnsiUpperCase( ovElements.Item( i ).type ) = 'CHECKBOX' ) then
 ovElements.Item( i ).checked:=true;
 |  
|   | KilkaMS (статус: Посетитель), 26 июля 2011, 17:29 [#14]:вопрос такой появился,а как к элементу по id обратиться? |  
|   | KilkaMS (статус: Посетитель), 26 июля 2011, 17:53 [#15]:по аналогии пытаюсь в комбобох изменить значение таким кодом if ( AnsiUpperCase( ovElements.Item( i ).tagName ) = 'SELECT' ) then
 ovElements.Item( i ).Value:='Ok';
 приложение падает с ошибокой
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |