Реклама на сайте Advertise with us

Вопрос тем, кто писал веб приложения и заполнял html под Win

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:



С нами с 24.03.03
Сообщения: 108
Рейтинг: 42

Ссылка на сообщениеДобавлено: 19/05/05 в 18:27       Ответить с цитатойцитата 

Для заполнения html форм я использую функциональность IE, подключая его ActiveX к своему приложению. Гружу html документ, затем используя методы объектов, расположенных на форме, заполяю их данными и программно жму кнопку Sumbit. Все замечательно. Все работает. Однако проблема возникает при попытке заполнения полей вида
input type="file" (используется например для указания пути до тумба при забмите галереи в тгп - на html рядом с таким полем будет кнопка browse)

Дело в том, что майкрософт не стала реализовыать для такого элемента метод Set_Value. Т.е. программно присвоить значение этому полю классическим методом нельзя.

Возможен следующий вариант решния проблемы: копировать в буфер обмена текст, который нужно поместить в поле, средствами win api находить нужное поле ввода, переводить фокус ввода на него, устанавливая туда курсор и посылать сообщение о нажатии гоячих клавиш Ctrl+V, т.е. моделировать поведение живого польователя (вродже как подобным образом работает AI Roboform). Правда у данного метода есть один большой недостаток: во время работы программы делать что-либо другое на компьютере будет затруднительно, ибо фокус ввода будет прыгать непредсказуемо...

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

Спасибо.

0
 

/dev/awm

С нами с 05.02.04
Сообщения: 2300
Рейтинг: 1127

Ссылка на сообщениеДобавлено: 19/05/05 в 21:06       Ответить с цитатойцитата 

Почитай про DOM-модель IE. Через нее можно сделать все. Хотя если ты говоришь что через ActivX не получилось к этому полю получить доступ, то не исключено что и через DOM-модель не выйдет. Хотя "за попробовать" денег не бурут.

Получать доступ к окну с формой - нереально. Именно из-за этой DOM-модели. Возьми утилиту Spy++ (не путать со спайварой :) это утилита для дебагинга виндов) и попробуй с помощью нее найти это окошко. Фиг там. Есть только окно адресной строки и ВСЕ окно ИЕ. Вот его как раз берешь, от него хватаешь IHTMLDocument и потом через COM-овские интерфейсы вытаскиваешь оттуда все.

JpS Live

0
 



С нами с 24.03.03
Сообщения: 108
Рейтинг: 42

Ссылка на сообщениеДобавлено: 20/05/05 в 07:14       Ответить с цитатойцитата 

Дык...
Я и говорю, что чрезе IHTMLDocument все как раз работает суперски.
Кроме одной проблемы, состоящей в том, что один из методов для одного из контролов не реализован майкрософт из соображений безопасности (ну я все это писал выше)

Вопрос в том, кто как решает именно эту пробоему...

0
 

adult - мое хобби

С нами с 17.10.02
Сообщения: 1124
Рейтинг: 262

Ссылка на сообщениеДобавлено: 20/05/05 в 10:42       Ответить с цитатойцитата 

Сам когда то бился - но не решил проблему
А как на остальных сабмитерах, ты не знаешь?

Adam Submitter

3
 



С нами с 24.03.03
Сообщения: 108
Рейтинг: 42

Ссылка на сообщениеДобавлено: 20/05/05 в 11:58       Ответить с цитатойцитата 

Да в том-о и дело, что я свой сабмиттер с 2001 года развиваю и вражеские ни разу не использовал (хотя это наверное стратегическая ошибка icon_smile.gif )
Решить бы этот вопрос и огромная куча сайтов, которые сейчас сабмитятся в ручном режиме ушли бы в автоматический.

Я вот тут подумал, поскольку речь идет только о локальной машине пользователя сабмитера, то наверное реально создать патч, который один раз патчит движок html-я и для этого типа поля ввода вместо заглушки на методе Set_Value ставит вызов этого метода, но от простого поля воода, где все работает нормально. Я почти уверен, что все эти поля наследуются от одного класса, так что по-логике такое возможно.

Только моей квалификации точно на это не хватит icon_sad.gif

0
 



С нами с 05.08.03
Сообщения: 336
Рейтинг: 114

Ссылка на сообщениеДобавлено: 20/05/05 в 14:21       Ответить с цитатойцитата 

Слова то какие "использую функциональность", ты часом не иностранец? Почитай rsdn или майкрософтные юзергруппы, там периодически такие вопли про поле "file" раздаются.

JpS писал:
Получать доступ к окну с формой - нереально. Именно из-за этой DOM-модели. Возьми утилиту Spy++ и попробуй с помощью нее найти это окошко. Фиг там. Есть только окно адресной строки и ВСЕ окно ИЕ. Вот его как раз берешь, от него хватаешь IHTMLDocument и потом через COM-овские интерфейсы вытаскиваешь оттуда все.


да без проблем hwnd контрола через DOM получить, через iwindow если мои старческая память не подводит, только не помогет icon_smile.gif К тому же существует еще одна пакость: оконные функции таже setwindowtext будут работать в рамках одного приложения, а обращаться вы к ним будете из другого, что несколько усложняет реализацию.

зы: фсем привет.

0
 



С нами с 05.10.04
Сообщения: 478
Рейтинг: 207

Ссылка на сообщениеДобавлено: 20/05/05 в 17:14       Ответить с цитатойцитата 

А если не setwindowtext, а через sendmessage, используя WM_SETTEXT, не прокатит? Раз уж hwnd имеем, то это лишь реально именно чуть чуть усложняет, но никак не делает невозможным...

ЗЫ: взглянуть хотябы на примеры "приложений" изменяющих заголовок окна любого приложения, которые кто как пишет... сколько людей - столько и версий... можно покопаться, поэкспериментировать.
ЗЗЫ: можно вообще самым извращенным способом - обрабатывать html самостоятельно icon_smile.gif Там уж точно ничего не ограничит...

0
 

/dev/awm

С нами с 05.02.04
Сообщения: 2300
Рейтинг: 1127

Ссылка на сообщениеДобавлено: 20/05/05 в 17:32       Ответить с цитатойцитата 

VinilNavigator писал:
А если не setwindowtext, а через sendmessage, используя WM_SETTEXT, не прокатит? Раз уж hwnd имеем, то это лишь реально именно чуть чуть усложняет, но никак не делает невозможным...
ЗЫ: взглянуть хотябы на примеры "приложений" изменяющих заголовок окна любого приложения, которые кто как пишет... сколько людей - столько и версий... можно покопаться, поэкспериментировать.
ЗЗЫ: можно вообще самым извращенным способом - обрабатывать html самостоятельно :) Там уж точно ничего не ограничит...



RTFM, setwindowtext _ничего более_ не делает, кроме как вызывает sendmessage(WM_SETTEXT...

а вот насчет парсить хтмль на пролете - вот это мне кажется решением. не нужно полностью брать на себя задачу браузера, просто перед отдачей его ИЕ, его надо подкоректировать на свои нужды и вуаля :)

JpS Live

0
 



С нами с 05.08.03
Сообщения: 336
Рейтинг: 114

Ссылка на сообщениеДобавлено: 20/05/05 в 22:10       Ответить с цитатойцитата 

JpS писал:
а вот насчет парсить хтмль на пролете - вот это мне кажется решением. не нужно полностью брать на себя задачу браузера, просто перед отдачей его ИЕ, его надо подкоректировать на свои нужды и вуаля icon_smile.gif


Браво, изящное решение, если DOM позволяет, можно менять тип контрола, делать свое чёрное дело, а затем обратно менять, как-будто ничего и не было.

0
 

/dev/awm

С нами с 05.02.04
Сообщения: 2300
Рейтинг: 1127

Ссылка на сообщениеДобавлено: 20/05/05 в 22:19       Ответить с цитатойцитата 

$elect писал:
Браво, изящное решение, если DOM позволяет, можно менять тип контрола, делать свое чёрное дело, а затем обратно менять, как-будто ничего и не было.


ну дальше уже по вкусу... дом позволяет

JpS Live

0
 



С нами с 05.08.03
Сообщения: 336
Рейтинг: 114

Ссылка на сообщениеДобавлено: 21/05/05 в 13:10       Ответить с цитатойцитата 

Не совсем по вкусу, контрол типа "file" отдает выбранный файл с локального диска на сервер (upload), поэтому необходимо перед отправкой формы все менять взад. Кстати я попробовал изменять таким образом тип и пока результат отрицательный.

0
 



С нами с 18.08.04
Сообщения: 6376
Рейтинг: 4430

Ссылка на сообщениеДобавлено: 22/05/05 в 14:17       Ответить с цитатойцитата 

А у меня была идея сделать все как у хамелеона то есть нахуй от IE отказаться. Но многие любят наблюдать за ходом поэтому пока и не делаю. зато для дайлапщиков вообще тема трафа не жрет

0
 



С нами с 24.03.03
Сообщения: 108
Рейтинг: 42

Ссылка на сообщениеДобавлено: 23/05/05 в 09:13       Ответить с цитатойцитата 

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

Правда пара возражений все-равно есть:

1. Если смотреть на сам сабмит может кто и не хочет, то на страницы-конфирмы наверное большинство смотреть все-таки хотят - так что половина трафика все-равно остается.

2. Простейшую форму думаю не очень сложно отправить, а вот если рассмотреть случай, когда сабмит защищен кодом? Там надо целый спектакль из http команд городить - дергать скрипт генерации этого самого кода, получать его, распознавать/показывать пользователю. Хотя если бы я начинал сейчас, то наверное пошел бы этим путем...

0
 



С нами с 05.06.03
Сообщения: 627
Рейтинг: 415

Ссылка на сообщениеДобавлено: 23/05/05 в 09:22       Ответить с цитатойцитата 

Мы когда писали свой сабмиттер - только через буфер проблему решили, по другому не как не получалось

Codelobster IDE - бесплатная кросс-платформенная IDE с поддержкой всех популярных фреймворков

0
 



С нами с 24.02.05
Сообщения: 75
Рейтинг: 123

Ссылка на сообщениеДобавлено: 24/05/05 в 14:16       Ответить с цитатойцитата 

+1 буфер обмена

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »