Что нового

Отправить Event в окно IE

JIereHga2010

Новичок
Сообщения
68
Репутация
0
Всем доброго времени суток :IL_AutoIt_1: :IL_AutoIt_1: :IL_AutoIt_1:
Подскажите пожалуйста решение такой ситуации:
В http://vk.com/club46162850 есть форма для отправки текста на стену:
Код:
<textarea class="fl_l" id="post_field" style="height: 32px; overflow: hidden;" onkeydown="onCtrlEnter(event, Wall.sendPost)" onkeyup="Wall.postChanged()" onfocus="Wall.showEditPost()"></textarea>
Так вот, для того что б вставить текст в эту форму я использую вот это:
Код:
$oIE = _IECreate ("http://vk.com/club46162850")
$oPost = _IEGetObjById ($oIE,"post_field")
_IEAction ($oPost,"focus")
_IEFormElementSetValue($oPost, "http://autoit-script.ru/") ;<==== сдесь нужно вставить ссылку на какой либо сайт

Но кое что идет не так... Если вставку делать вручную через ctrl+V или средствами команды ControlSend то после вставки в ВК открывается так называемая ссылка с картинкой того сайта, ссылку на который я вставляю.
А если просто устанавливать значение через IEFormElementSetValue, то такого окна не открывается.
Связано это видимо с тем, что при ctrl+V срабатывают эвенты onkeyup и onkeydown, а при IEFormElementSetValue срабатывает только OnChange и OnClick, согласно справке.
Как можно дополнительно активировать эвенты средствами IEManagment ???
Ну вот, как то так описал, как сам понял. Если что не так, прошу поправить и указать дорогу в нужном направлении.
P.S: А лучше расписать все по пунктам
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Я пробовал и через
Код:
_IENavigate($oIE, "javascript:code")

И через функцию
Код:
_IEHeadInsertEventScript

Не получилось.
Поэтому я сделал через ControlSend (это должно работать в фоне и не должно мешать работе за компьютером).
Код:
#include <IE.au3>
$oIE = _IECreate ("http://vk.com/club46162850")
$oPost = _IEGetObjById ($oIE,"post_field")
_IEAction ($oPost,"focus")
_IEFormElementSetValue($oPost, "http://autoit-script.ru/") ;<==== сдесь нужно вставить ссылку на какой либо сайт
ControlSend(_IEPropertyGet($oIE, "hwnd"), "", "", "{SPACE}")
 
Автор
J

JIereHga2010

Новичок
Сообщения
68
Репутация
0
Непойдет :'(
Дело в том что команда ControlSend срабатывает только если окно активно, т.е. даже если окно свернуто, команда ControlSend не выполняется.... Надо думать что то с
Код:
$oPost.fireEvent("onkeyup")
$oPost.fireEvent("onkeydown")


Ведь они явно передают какие то данные, например о нажатии кнопок... :scratch:
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Да, я fireEvent тоже пробовал и тоже не заработало... :(
 
Автор
J

JIereHga2010

Новичок
Сообщения
68
Репутация
0
Пишу на форум по Javascript, если найду решение, отпишу.
Кто найдет его раньше, просьба скинуть в эту тему :IL_AutoIt_1: :IL_AutoIt_1: :IL_AutoIt_1:
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Это делается просто, скажем событие keyup для элемента $div_d1 вызывается так:
Код:
$evt = $document.createEvent('KeyboardEvent')
			$evt.initKeyboardEvent('keyup', true, true, $window, $key, 0, '', False, 'en-US')
			$div_d1.dispatchEvent($evt);
 
Автор
J

JIereHga2010

Новичок
Сообщения
68
Репутация
0
inververs сказал(а):
Это делается просто....
Пожалуйста, можно ли этот код переписать ближе к моему примеру??
Написал вот так:
Код:
$evt = $document.createEvent('KeyboardEvent')
            $evt.initKeyboardEvent('keyup', true, true, $window, $key, 0, '', False, 'en-US')
            $oPost.dispatchEvent($evt);

Получил
Код:
$evt = $document.createEvent('KeyboardEvent')
$evt = ^ ERROR
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
JIereHga2010
О господе. Канечно я счас все перепишу! :laugh:
 
Автор
J

JIereHga2010

Новичок
Сообщения
68
Репутация
0
inververs сказал(а):
JIereHga2010
О господе. Канечно я счас все перепишу! :laugh:

Ой, спасибо огромное, буду очень очень рад :ok: :ok: :ok:
OffTopic:
Если конечно это был не сарказм ;)
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
images
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
OffTopic:
JIereHga2010 [?]
Пожалуйста, можно ли этот код переписать ближе к моему примеру??
Грустно всё это до боли!
Предлагаю открыть раздел "Sandbox" - Основы программирования. Развитие логического мышления.
Доступ в другие разделы осуществляется:
Репутация: ~50+
 
Автор
J

JIereHga2010

Новичок
Сообщения
68
Репутация
0
OffTopic:
У Великих Гуру видимо слетит корона, если Они спустятся до уровня новичка и окажут помощь...
А я думал, что форум для этого и предназначен. Извините, ошибся :scratch:
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
OffTopic:
JIereHga2010
Если вы хотите изучать программирование, то будьте так любезны изучите основы и элементарные понятия!!! Как? Читайте книги!!!
Получил
Код:
$evt = $document.createEvent('KeyboardEvent')
$evt = ^ ERROR
Что тут не понятно???
Наверно то, что знак ^ указывает вам на место ошибки. Значит, логично предположить что переменная $document будучи объектом не является таковым, следовательно, нужно искать причину почему переменная $document не является объектом!!!
Откуда я узнал что $document должна быть объектом?!
Обратимся к синтаксису и вспомним, что в языках программирования (Autoit и др.) точка является оператором доступа к свойствам и методам.
Оператор точка (.) обеспечивает способ доступа к свойствам и методам объекта. Используя синтаксис с точкой, можно обращаться к свойствам или методам класса по имени экземпляра, указывая за оператором точка имя требуемого свойства или метода.

Такие вопросы возникают потому, что вы ждёте что кто-нибудь за вас всё решит и напишет!
Прежде чем спросить!

P.S. По поводу короны, так меня никто не "короновал", посему я спокоен ;)
 

shyra1976

Новичок
Сообщения
71
Репутация
0
Ребят
Я понимаю русский язык ,но иногда я вас не понимаю когда вы обьясняете и только на этих примерах как то дохожу до сути По этому не обижаитесь на наши глупые вопросы
 
Автор
J

JIereHga2010

Новичок
Сообщения
68
Репутация
0
Garrett сказал(а):
Что тут не понятно???
Наверно то, что знак ^ указывает вам на место ошибки. Значит, логично предположить что переменная $document будучи объектом не является таковым, следовательно, нужно искать причину почему переменная $document не является объектом!!!
Откуда я узнал что $document должна быть объектом?!
Обратимся к синтаксису и вспомним, что в языках программирования (Autoit и др.) точка является оператором доступа к свойствам и методам.
Оператор точка (.) обеспечивает способ доступа к свойствам и методам объекта. Используя синтаксис с точкой, можно обращаться к свойствам или методам класса по имени экземпляра, указывая за оператором точка имя требуемого свойства или метода.
Вот как раз то что Вы написали, я как раз понимаю, по этому пробовал другой вариант:
Код:
$oIE = _IECreate ("http://vk.com/club46162850")
$oPost = _IEGetObjById ($oIE,"post_field")
_IEAction ($oPost,"focus")
_IEFormElementSetValue($oPost, "http://autoit-script.ru/") ;<==== сдесь нужно вставить ссылку на какой либо сайт
$evt = $oPost.createEvent('KeyboardEvent')
            $evt.initKeyboardEvent('keyup', true, true, $window, $key, 0, '', False, 'en-US')
            $oPost.dispatchEvent($evt);

И вот так:
Код:
$oIE = _IECreate ("http://vk.com/club46162850")
$oPost = _IEGetObjById ($oIE,"post_field")
_IEAction ($oPost,"focus")
_IEFormElementSetValue($oPost, "http://autoit-script.ru/") ;<==== сдесь нужно вставить ссылку на какой либо сайт
$evt = $oIE.createEvent('KeyboardEvent')
            $evt.initKeyboardEvent('keyup', true, true, $window, $key, 0, '', False, 'en-US')
            $oPost.dispatchEvent($evt);

И получаю:
Код:
$evt.initKeyboardEvent('keyup', true, true, $window, $key, 0, '', False, 'en-US')
$evt^ ERROR

Значит в $evt нет нужных данных, а значит вот в этом месте $oPost.createEvent('KeyboardEvent') тоже что то не так.
Я так же догадываюсь что вместо $window и $key должно быть что то другое.
Прежде чем написать сюда, я гуглил по форумам и сайтам, и что бы получить, то что мне нужно, мне необходимо учить javascript.
По этому и прошу помощи, и вместо оффтопа надеюсь получить либо ссылку на более понятную документацию, либо готовое решение, темболее, что, как написал inververs, это делается просто... Значит не составило бы большого труда переписать код под мой вариант... А я уж по наглядному примеру, понял бы что к чему относится... Я понимаю, что Ваше возмущение вызвано тем, что я не знаю азов, но это уже моя проблема, я не считаю себя каким бы то нибыло программистом. Я просто хочу написать скрипт, который облегчил бы мне некоторую задачу. Если нет желания помогать, идите с Богом а не устраивайте прилюдие.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Версия браузера какая?
 

shyra1976

Новичок
Сообщения
71
Репутация
0
JIereHga2010привет
я тоже новичок
Вопрос ты понимаешь что эта команда делает?
Если можешь обьясни

Код:
createEvent
(obj:shok:bject) — метод, класс mx.automation.AutomationEventDescriptor
Создает событие на основе класса и типа, определенных в данном дескрипторе.
Код:
createEvent
(fault:mx.rpc:Fault, token:mx.rpc:AsyncToken, msg:mx.messaging.messages:IMessage) — Статический метод , класс mx.rpc.events.FaultEvent
В случае ошибки этот метод создает и возвращает FaultEvent.
Код:
createEvent
(header:shok:bject, token:mx.rpc:AsyncToken, message:mx.messaging.messages:IMessage) — Статический метод , класс mx.rpc.events.HeaderEvent
Служебный метод для создания нового события HeaderEvent, которое не имеет свойства bubble и имеет свойство cancelable.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Код:
$evt = $oIE.document.createEvent('KeyboardEvent')
            $evt.initKeyboardEvent('keyup', true, true, 0, 'W', 0, '', False, 'en-US')
            $oPost.dispatchEvent($evt);



Добавлено:
Сообщение автоматически объединено:

Вот здесь больше инфы: ищите KeyboardEvent
 
Верх