Как осуществить показ HTML страницы в окне своей программы

Тема в разделе "WASM.BEGINNERS", создана пользователем assch, 11 сен 2017.

  1. assch

    assch Member

    Публикаций:
    0
    Регистрация:
    17 мар 2011
    Сообщения:
    208
    В своё время я начинал программировать на языке - AutoIt у меня до сих пор на компе лежит папка с её платформой. как то просматривая её я наткнулся на один любопытный пример, где в окне программы во фрейме показывалась HTML страница. я решил попробовать сделать это Ассемблере. для начала я урезал этот пример до минимума и поменял ссылку на открытие страницы там была дана ссылка на ихний сайт - AutoIt, но так как она очень долго загружается я в примере поменял её на адрес HTML страницы, которую я просто положил в корень своего диска. попробывал дизасемблирование экзешника, но IDA выдаёт бесмысленный поток чисел. пример кодинга на этом языке до банальности прост, тегов на этом языке нет по этому я заверну в теги - ASM

    Код (ASM):
    1. #include <GUIConstantsEx.au3>
    2. #include <WindowsConstants.au3>
    3. #include <IE.au3>
    4. Local $oIE = _IECreateEmbedded()
    5. GUICreate("Test",800,400)
    6. GUISetState()
    7. GUICtrlCreateObj($oIE,10,10,780,380)
    8. _IENavigate($oIE,"file:///C:/assch.htm")
    9. While 1
    10. $msg = GUIGetMsg()
    11. If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    12. WEnd
    13. Exit
    после анализа я понял только одно, что HTML страница показывается средствами - Internet Explorer

    алгоритм кодинга



    первые два подключаемых файла это банальные константы единственный для интереса подключаемый файл это - IE.au3

    сначала создаётся окно программы

    Код (ASM):
    1. GUICreate("Test",800,400)
    2. GUISetState()
    потом функция - _IECreateEmbedded() возвращает какой то объект - $oIE под этот объект создаётся фрейм

    Код (ASM):
    1. GUICtrlCreateObj($oIE,10,10,780,380)
    потом функция - _IENavigate выводит страницу в этот фрейм по указанной ссылке

    Код (ASM):
    1. _IENavigate($oIE,"file:///C:/assch.htm")
    ну следующий код это банальная обработка сообщений и выход

    Код (ASM):
    1. While 1
    2. $msg = GUIGetMsg()
    3. If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    4. WEnd
    5. Exit
    единственное что в данном случае должно представлять интерес это создание объекта функцией - _IECreateEmbedded() и вывод страницы во фрейм функцией - _IENavigate посмотрев подключаемый файл - IE.au3 я нашёл там функцию - _IECreateEmbedded() в которой интерес может представлять только первая строчка, остальной алгоритм функции это банальная работа над ошибками

    Код (ASM):
    1. Local $o_object = ObjCreate("Shell.Explorer.2")
    здесь можно предположить что внутренняя функция - ObjCreate вытаскивает ссылку на какой то интерфейс - "Shell.Explorer.2" предполагаю, что этот интерфейс относится к - Internet Explorer, ну а дальше, используя эту ссылку функция - _IENavigate делает свою часть работы

    экзешник примера на AutoIt в RAR формате ради интереса прилагаю - Test.rar только, по понятным причинам, указанная страница у вас открываться не будет там скорее всего появится информация что страница не может быть открыта, но для наглядного примера то есть увидеть смысл я думаю этого будет достаточно

    Если кто в теме подскажите пожалуйста, как это перевести на более понятные API рельсы
     

    Вложения:

    • Test.rar
      Размер файла:
      323,1 КБ
      Просмотров:
      238
  2. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.347
    Ну, тут все просто: надо реализовать в своем окне парочку интерфейсов, чтобы разместить на нем ActiveX контрол :)
     

    Вложения:

    • AxCtrl.rar
      Размер файла:
      6 КБ
      Просмотров:
      247
  3. yashechka

    yashechka Ростовский фанат Нарвахи

    Публикаций:
    90
    Регистрация:
    2 янв 2012
    Сообщения:
    1.449
    Адрес:
    Россия
    Я писал скрипты в банке на ней, очень классная. Приходит чел. и говорит отправь такую форму туда, а эту туда, или нужно до 16 отправлять каждый день. Просто ярлык запускаешь, а она уже сама все сделает как ты ей приказал.
     
  4. assch

    assch Member

    Публикаций:
    0
    Регистрация:
    17 мар 2011
    Сообщения:
    208
    Спасибо за наводку
    Но честно говоря я не в теме и по этому для меня это будет не совсем просто разобратся
    было бы не плохо конкректный пример реализации
    Но всё равно большое спасибо
     
  5. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.347
    А это и есть конкретный пример. Это окно-контейнер ActiveX контролов, после регистрации класса окна, ты можешь создавать его функцией CreateWindow(), указывая в качестве класса "AxCtrl", а в качестве заголовка CLSID интересующего тебя контрола. Но это только первая (самая малая) часть кода, которую тебе придется написать для работы с IE на winapi. Затем тебе придется написать (если не найдешь готовых) все интерфейсы IE, чтобы через них взаимодействовать с внедренным на окно контролом (вызывать метод Navigate() и т.п.). В аттаче пример того, как это выглядит для MsRDP. Там где-то после десятитысячной строки есть предостережение: не стоит влезать в эту тему, ты молодой, шутливый... :)
     

    Вложения:

    • MsTscAx.rar
      Размер файла:
      20,7 КБ
      Просмотров:
      234
    yashechka нравится это.