Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   IE embadded, как найти чужой? (http://forum.oszone.net/showthread.php?t=145536)

DjinnKo 18-07-2009 22:03 1171552

IE embadded, как найти чужой?
 
Здравствуйте, подскажите плз.
Есть программа, она в своем окне юзает IE компоненты (ну вроде IE_embaded), подскажите плз как именно его найти и использовать как свое окно, как будто я сделал IE_Create ?
заранее благодарен.

proxy 19-07-2009 00:19 1171616

DjinnKo, ууууу, класс! самая классная задача - угадать, что же вы подразумеваите ))
И так, есть пример в справке на _IECreateEmbedded
читать дальше »

Код:

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>

_IEErrorHandlerRegister ()

$oIE = _IECreateEmbedded ()
GUICreate("Embedded Web control Test", 640, 580, _
        (
@DesktopWidth - 640) / 2, (@DesktopHeight - 580) / 2, _
        $WS_OVERLAPPEDWINDOW + $WS_VISIBLE + $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN)
$GUIActiveX = GUICtrlCreateObj($oIE, 10, 40, 600, 360)
$GUI_Button_Back = GUICtrlCreateButton("Back", 10, 420, 100, 30)
$GUI_Button_Forward = GUICtrlCreateButton("Forward", 120, 420, 100, 30)
$GUI_Button_Home = GUICtrlCreateButton("Home", 230, 420, 100, 30)
$GUI_Button_Stop = GUICtrlCreateButton("Stop", 340, 420, 100, 30)

GUISetState()      ;Show GUI

_IENavigate ($oIE, "http://www.autoitscript.com")

; Waiting for user to close the window
While 1
    $msg = GUIGetMsg()
    Select
        Case
$msg = $GUI_EVENT_CLOSE
            ExitLoop
        Case
$msg = $GUI_Button_Home
            _IENavigate ($oIE, "http://www.autoitscript.com")
        Case $msg = $GUI_Button_Back
            _IEAction ($oIE, "back")
        Case $msg = $GUI_Button_Forward
            _IEAction ($oIE, "forward")
        Case $msg = $GUI_Button_Stop
            _IEAction ($oIE, "stop")
    EndSelect
WEnd


GUIDelete()

Exit


1) что в нем не так?
2) что к нему прикрутить?
3) куда?
4) Как именно?
5) в Каком виде?
6) что именно?

DjinnKo 19-07-2009 00:28 1171622

о_О
Постараюсь объяснить понятно.
Есть программа, у нее как раз и используется:
Цитата:

>>>> Control <<<<
Class: Internet Explorer_Server
Instance: 1
ClassnameNN: Internet Explorer_Server1
Advanced (Class): [CLASS:Internet Explorer_Server; INSTANCE:1]
ID:
Text:
Handle: 0x00050CD0
Вот мне ндо как-то его использовать. и желательно конечно получить хендел как после:
Код:

_IECreate
чтобы я мог использовать ф-и вроде:
Код:

_IEFormElementSetValue
Вот, так надеюсь понятно.

Спасибо что отозвался :)

proxy 19-07-2009 00:44 1171628

Цитата:

Цитата DjinnKo
Вот, так надеюсь понятно. »

да )

Хендл можно получить так: ControlGetHandle(хэндл_окна, '', '[CLASS:Internet Explorer_Server; INSTANCE:1]')
а уж как себя поведут _IEFormElementSetValue и т.д. - стоит проверить....

Цитата:

Спасибо что отозвался
пожалуйста )

DjinnKo 19-07-2009 00:54 1171634

проверю и сообщу что и как :)

Код:

        WinWait("сесе")
        $wh = WinGetHandle ( "сесе" )
        If @error Then
                MsgBox(4096, "Error", "Could not find the correct window")
        EndIf
        $ch = ControlGetHandle($wh, '', '[CLASS:Internet Explorer_Server; INSTANCE:1]')
        If @error Then
                MsgBox(4096, "Error", "Could not find the correct window")
        EndIf

        $HTML = _IEBodyReadHTML ($ch)
        ConsoleWrite($HTML)

MsgBox - не показывает, но ;HTML = 0 и
Код:

--> IE.au3 V2.4-0 Error from function _IEBodyReadHTML, $_IEStatus_InvalidDataType

DjinnKo 19-07-2009 01:36 1171653

proxy, подскажи плз что я не так сделал... или может есть еще варианты ?

proxy 19-07-2009 02:08 1171663

Сделал все правильно. А проблема в том, что для функций _IEBodyReadHTML и т.д., необходимо указывать не хендл элемента, а объект на элемент.
Как поучить указатель на сторонний объект, в данном случае на IE типа _IECreateEmbedded, не знаю.

DjinnKo 19-07-2009 12:45 1171828

а есть возможность как-то посторонними путями вытащить исходный код страници и как использовать все элементы чтобы заполнять и выделять что нужно (чекбоксы, тектовые поля...) ?

DjinnKo 19-07-2009 16:29 1171948

Люди, никто не знает как решить эту проблему ?

proxy 19-07-2009 18:43 1172062

Цитата:

Цитата DjinnKo
исходный код страници »

это все в том же стороннем объекте IE?....

а использовать свой IE или _INetGetSource невозможно?

DjinnKo 19-07-2009 20:10 1172138

нет, нужно конкретно переловить то окно.
ну или полностью имитировать его работу... как переловить пути куда он и что шлет ? ну и соответственно ка кимитировать POST запрос в AutoIt ?

proxy 19-07-2009 21:10 1172187

Цитата:

Цитата DjinnKo
ну и соответственно ка кимитировать POST запрос в AutoIt ? »

вот именно POSt нужен? GET не подойдет - _INetGetSource
по поводу POST запросов можно попробовать это / и это

DjinnKo 19-07-2009 21:15 1172192

а как можно увидеть куда он обращается чтобы это все имитировать ?
и может есть всеже возможность как-то контролировать IE компонент нужной программы... ?

P.S. снифер использовать не рентабельно, много муссора словит... что есть нормальное для таких целей ?

proxy 19-07-2009 21:22 1172205

Цитата:

Цитата DjinnKo
P.S. снифер использовать не рентабельно, много муссора словит... что есть нормальное для таких целей ? »

имхо, уж в этом направление заменить запросы сторонней программы - мега гемор )

Цитата:

Цитата DjinnKo
а как можно увидеть куда он обращается чтобы это все имитировать ?
и может есть всеже возможность как-то контролировать IE компонент нужной программы... ? »

да думаю можно и тут, тока не в силах я тебе помочь ))) Главное узнать технологию, как получить указатель на объект, созданный в стороннем приложении. А уж на AutoIt можно мнооооого чего накодить.

DmitriyS 27-07-2009 10:25 1178725

Почитай, может поможет.
http://www.autoitscript.com/forum/in...howtopic=10444

DjinnKo 31-07-2009 16:46 1182520

Да, все хорошо, но вот оно чет не находит нужное окно с компонентом...
Подскажите плз, может можно искать не по LocateURl ? и вообще где можно увидеть какие методы имеет выбраный обьект ?

Заранее благодарен.

DmitriyS 01-08-2009 12:27 1182951

Цитата:

Цитата DjinnKo
Подскажите плз, может можно искать не по LocateURl ? »

я использую $Window.LocationName для поиска.

DjinnKo 01-08-2009 13:08 1182970

хм...а что это значит ? и где можно увидеть все переменные используемые в: $Window.* ????

DmitriyS 07-08-2009 08:26 1187843

Цитата:

Цитата DjinnKo
где можно увидеть все переменные используемые в: $Window.* ? »

Ничего толкового сказать по этому поводу не смогу, я просто просмотрел файл IE.au3 и почерпнул из него много интересного ;). И еще использовал вот такой вот код:

$oShell = ObjCreate("shell.application")
$oShellWindows = $oShell.windows
For $Window In $oShellWindows
MsgBox(0,"1",$Window.Name)
Next

В месте 3-его параметра перечислил все комбинации, которые нашел в IE.au3 и плюс те, которые подходили по смыслу.

DjinnKo 09-08-2009 13:21 1189334

проблема не решена, еще :(

DmitriyS 10-08-2009 10:21 1189929

Хммм.... , давай посмотри код. Он создает окно браузера, открывает новое окно из родительского, потом находит дочернее и позволяет с ним работать. Но данный код позволяет работать только с виндовыми окнами: Explorer, IE.

Код:

#include <IE.au3>
;Чтобы разрешить всплывающие окна с яндекса
RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\New Windows\Allow", "*.yandex.ru", "REG_BINARY", "0x0000")
;Ищем в яндексе сайт http://wmxchange.ru/
$oIE = _IECreate("http://yandex.ru/yandsearch?rpt=rad&text=http://wmxchange.ru/")
;Открываем найденный сайт, должен открыться в новом окне
_IELinkClickByText($oIE, "http://wmxchange.ru/")
;Подождем запуска браузера и загрузки страницы, т.к. в противном случае можем упустить новое окно в $oShellWindows
Sleep(10000)
;Создадим объект
$oShell = ObjCreate("shell.application")
$oShellWindows = $oShell.windows
;В цикле по всем объектам в $oShellWindows
For $Window In $oShellWindows
        ;Выведем интресующие нас параметры
        MsgBox (0, "1", "_"&$Window.LocationUrl &"_"&$Window.LocationName&"_")
        ;Вот здесь находишь нужное окно по одному из параметров, к примеру
        If $Window.LocationName = "WMX-CHANGE" Then
                MsgBox (0, "1", "Новое окно найдено")
        EndIf
        ;И адльше к нему можно применять стандртные функции, к примеру
        _IEQuit($Window)
Next
Exit

Если что то не понял, то сорри, и тогда уточни все с нуля, т.к. для меня вопрос тоже важный.

DjinnKo 10-08-2009 15:21 1190192

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

DmitriyS 10-08-2009 16:36 1190248

А какое именно приложение?


Время: 22:52.

Время: 22:52.
© OSzone.net 2001-