Получение кода HTML-страницы и отдельных тегов
Получение кода HTML-страницы и отдельных тегов
Ранее мы уже познакомились с такой интересной штукой, как встроенный браузер на Ассемблере. Но его применение именно в таком виде весьма ограниченно. А вот работа с исходным текстом загруженной страницы, извлечение из нее данных, взаимодействие с элементами - это совершенно другой уровень полезности.
Начальную теорию можете почитать по приведенной ссылке, чтобы не дублировать, а тут будут материалы по теме статьи. Начнем с получения исходного кода HTML-страницы. Но сперва чуть-чуть теории. После выполнения запроса на открытие ссылки при помощи метода Navigate2, надо определить момент, когда страница будет полностью загружена, чтобы можно было получить ее исходный код. Для этого удобнее всего использовать таймер с коротким интервалом, по которому проверяется статус выполняемого запроса. Когда статус будет иметь значение READYSTATE_COMPLETE или READYSTATE_LOADED, то можно приступать к основной части задачи.
Получить код страницы можно разными способами. Но в любом случае нам понадобится несколько объемных структур.
Code (Assembler) : Убрать нумерацию
- ; GUID {8856F961-340A-11D0-A96B-00C04FD705A2}
- CLSID_WebBrowser dd 08856F961h
- dw 0340Ah
- dw 011D0h
- db 0A9h, 06Bh, 000h, 0C0h, 04Fh, 0D7h, 005h, 0A2h
- ; GUID {D30C1661-CDAF-11D0-8A3E-00C04FC9E26E}
- IID_IWebBrowser2 dd 0D30C1661h
- dw 0CDAFh
- dw 011D0h
- db 08Ah, 03Eh, 000h, 0C0h, 04Fh, 0C9h, 0E2h, 06Eh
- ; GUID {332C4425-26CB-11D0-B483-00C04FD90119}
- IID_IHTMLDocument2 dd 0332C4425h
- dw 026CBh
- dw 011D0h
- db 0B4h, 083h, 000h, 0C0h, 04Fh, 0D9h, 001h, 019h
- ; GUID {3050F1FF-98B5-11CF-BB82-00AA00BDCE0B}
- IID_IHTMLElement dd 03050F1FFh
- dw 098B5h
- dw 011CFh
- db 0BBh, 082h, 000h, 0AAh, 000h, 0BDh, 0CEh, 00Bh
- ; IID_IWebBrowser2 Interface
- struct IWebBrowser2
- ; IUnknown
- QueryInterface dd ? ; 000h
- AddRef dd ? ; 004h
- Release dd ? ; 008h
- ; IWebBrowser2
- GetTypeInfoCount dd ? ; 00Ch
- GetTypeInfo dd ? ; 010h
- GetIDsOfNames dd ? ; 014h
- _Invoke dd ? ; 018h
- GoBack dd ? ; 01Ch
- GoForward dd ? ; 020h
- GoHome dd ? ; 024h
- GoSearch dd ? ; 028h
- Navigate dd ? ; 02Ch
- Refresh dd ? ; 030h
- Refresh2 dd ? ; 034h
- Stop dd ? ; 038h
- get_Application dd ? ; 03Ch
- get_Parent dd ? ; 040h
- get_Container dd ? ; 044h
- get_Document dd ? ; 048h
- get_TopLevelContainer dd ? ; 04Ch
- get_Type dd ? ; 050h
- get_Left dd ? ; 054h
- put_Left dd ? ; 058h
- get_Top dd ? ; 05Ch
- put_Top dd ? ; 060h
- get_Width dd ? ; 064h
- put_Width dd ? ; 068h
- get_Height dd ? ; 06Ch
- put_Height dd ? ; 070h
- get_LocationName dd ? ; 074h
- get_LocationURL dd ? ; 078h
- get_Busy dd ? ; 07Ch
- Quit dd ? ; 080h
- ClientToWindow dd ? ; 084h
- PutProperty dd ? ; 088h
- GetProperty dd ? ; 08Ch
- get_Name dd ? ; 090h
- get_HWND dd ? ; 094h
- get_FullName dd ? ; 098h
- get_Path dd ? ; 09Ch
- get_Visible dd ? ; 0A0h
- put_Visible dd ? ; 0A4h
- get_StatusBar dd ? ; 0A8h
- put_StatusBar dd ? ; 0ACh
- get_StatusText dd ? ; 0B0h
- put_StatusText dd ? ; 0B4h
- get_ToolBar dd ? ; 0B8h
- put_ToolBar dd ? ; 0BCh
- get_MenuBar dd ? ; 0C0h
- put_MenuBar dd ? ; 0C4h
- get_FullScreen dd ? ; 0C8h
- put_FullScreen dd ? ; 0CCh
- Navigate2 dd ? ; 0D0h
- QueryStatusWB dd ? ; 0D4h
- ExecWB dd ? ; 0D8h
- ShowBrowserBar dd ? ; 0DCh
- get_ReadyState dd ? ; 0E0h
- get_Offline dd ? ; 0E4h
- put_Offline dd ? ; 0E8h
- get_Silent dd ? ; 0ECh
- put_Silent dd ? ; 0F0h
- get_RegisterAsBrowser dd ? ; 0F4h
- put_RegisterAsBrowser dd ? ; 0F8h
- get_RegisterAsDropTarget dd ? ; 0FCh
- put_RegisterAsDropTarget dd ? ; 100h
- get_TheaterMode dd ? ; 104h
- put_TheaterMode dd ? ; 108h
- get_AddressBar dd ? ; 10Ch
- put_AddressBar dd ? ; 110h
- get_Resizable dd ? ; 114h
- put_Resizable dd ? ; 118h
- ends
- ; IID_IHTMLDocument2 Interface
- struct IHTMLDocument2
- ; IUnknown
- QueryInterface dd ? ; 000h
- AddRef dd ? ; 004h
- Release dd ? ; 008h
- ; IHTMLDocument2
- GetTypeInfoCount dd ? ; 00Ch
- GetTypeInfo dd ? ; 010h
- GetIDsOfNames dd ? ; 014h
- _Invoke dd ? ; 018h
- get_Script dd ? ; 01Ch
- get_all dd ? ; 020h
- get_body dd ? ; 024h
- get_activeElement dd ? ; 028h
- get_images dd ? ; 02Ch
- get_applets dd ? ; 030h
- get_links dd ? ; 034h
- get_forms dd ? ; 038h
- get_anchors dd ? ; 03Ch
- put_title dd ? ; 040h
- get_title dd ? ; 044h
- get_scripts dd ? ; 048h
- put_designMode dd ? ; 04Ch
- get_designMode dd ? ; 050h
- get_selection dd ? ; 054h
- get_readyState dd ? ; 058h
- get_frames dd ? ; 05Ch
- get_embeds dd ? ; 060h
- get_plugins dd ? ; 064h
- put_alinkColor dd ? ; 068h
- get_alinkColor dd ? ; 06Ch
- put_bgColor dd ? ; 070h
- get_bgColor dd ? ; 074h
- put_fgColor dd ? ; 078h
- get_fgColor dd ? ; 07Ch
- put_linkColor dd ? ; 080h
- get_linkColor dd ? ; 084h
- put_vlinkColor dd ? ; 088h
- get_vlinkColor dd ? ; 08Ch
- get_referrer dd ? ; 090h
- get_location dd ? ; 094h
- get_lastModified dd ? ; 098h
- put_URL dd ? ; 09Ch
- get_URL dd ? ; 0A0h
- put_domain dd ? ; 0A4h
- get_domain dd ? ; 0A8h
- put_cookie dd ? ; 0ACh
- get_cookie dd ? ; 0B0h
- put_expando dd ? ; 0B4h
- get_expando dd ? ; 0B8h
- put_charset dd ? ; 0BCh
- get_charset dd ? ; 0C0h
- put_defaultCharset dd ? ; 0C4h
- get_defaultCharset dd ? ; 0C8h
- get_mimeType dd ? ; 0CCh
- get_fileSize dd ? ; 0D0h
- get_fileCreatedDate dd ? ; 0D4h
- get_fileModifiedDate dd ? ; 0D8h
- get_fileUpdatedDate dd ? ; 0DCh
- get_security dd ? ; 0E0h
- get_protocol dd ? ; 0E4h
- get_nameProp dd ? ; 0E8h
- write dd ? ; 0ECh
- writeln dd ? ; 0F0h
- open dd ? ; 0F4h
- close dd ? ; 0F8h
- clear dd ? ; 0FCh
- queryCommandSupported dd ? ; 100h
- queryCommandEnabled dd ? ; 104h
- queryCommandState dd ? ; 108h
- queryCommandIndeterm dd ? ; 10Ch
- queryCommandText dd ? ; 110h
- queryCommandValue dd ? ; 114h
- execCommand dd ? ; 118h
- execCommandShowHelp dd ? ; 11Ch
- createElement dd ? ; 120h
- put_onhelp dd ? ; 124h
- get_onhelp dd ? ; 128h
- put_onclick dd ? ; 12Ch
- get_onclick dd ? ; 130h
- put_ondblclick dd ? ; 134h
- get_ondblclick dd ? ; 138h
- put_onkeyup dd ? ; 13Ch
- get_onkeyup dd ? ; 140h
- put_onkeydown dd ? ; 144h
- get_onkeydown dd ? ; 148h
- put_onkeypress dd ? ; 14Ch
- get_onkeypress dd ? ; 150h
- put_onmouseup dd ? ; 154h
- get_onmouseup dd ? ; 158h
- put_onmousedown dd ? ; 15Ch
- get_onmousedown dd ? ; 160h
- put_onmousemove dd ? ; 164h
- get_onmousemove dd ? ; 168h
- put_onmouseout dd ? ; 16Ch
- get_onmouseout dd ? ; 170h
- put_onmouseover dd ? ; 174h
- get_onmouseover dd ? ; 178h
- put_onreadystatechange dd ? ; 17Ch
- get_onreadystatechange dd ? ; 180h
- put_onafterupdate dd ? ; 184h
- get_onafterupdate dd ? ; 188h
- put_onrowexit dd ? ; 18Ch
- get_onrowexit dd ? ; 190h
- put_onrowenter dd ? ; 194h
- get_onrowenter dd ? ; 198h
- put_ondragstart dd ? ; 19Ch
- get_ondragstart dd ? ; 1A0h
- put_onselectstart dd ? ; 1A4h
- get_onselectstart dd ? ; 1A8h
- elementFromPoint dd ? ; 1ACh
- get_parentWindow dd ? ; 1B0h
- get_styleSheets dd ? ; 1B4h
- put_onbeforeupdate dd ? ; 1B8h
- get_onbeforeupdate dd ? ; 1BCh
- put_onerrorupdate dd ? ; 1C0h
- get_onerrorupdate dd ? ; 1C4h
- toString dd ? ; 1C8h
- createStyleSheet dd ? ; 1CCh
- ends
- ; IHTMLElement Interface
- struct IHTMLElement
- ; IUnknown
- QueryInterface dd ? ; 000h
- AddRef dd ? ; 004h
- Release dd ? ; 008h
- ; IHTMLElement
- GetTypeInfoCount dd ? ; 00Ch
- GetTypeInfo dd ? ; 010h
- GetIDsOfNames dd ? ; 014h
- _Invoke dd ? ; 018h
- setAttribute dd ? ; 01Ch
- getAttribute dd ? ; 020h
- removeAttribute dd ? ; 024h
- put_className dd ? ; 028h
- get_className dd ? ; 02Ch
- put_id dd ? ; 030h
- get_id dd ? ; 034h
- get_tagName dd ? ; 038h
- get_parentElement dd ? ; 03Ch
- get_style dd ? ; 040h
- put_onhelp dd ? ; 044h
- get_onhelp dd ? ; 048h
- put_onclick dd ? ; 04Ch
- get_onclick dd ? ; 050h
- put_ondblclick dd ? ; 054h
- get_ondblclick dd ? ; 058h
- put_onkeydown dd ? ; 05Ch
- get_onkeydown dd ? ; 060h
- put_onkeyup dd ? ; 064h
- get_onkeyup dd ? ; 068h
- put_onkeypress dd ? ; 06Ch
- get_onkeypress dd ? ; 070h
- put_onmouseout dd ? ; 074h
- get_onmouseout dd ? ; 078h
- put_onmouseover dd ? ; 07Ch
- get_onmouseover dd ? ; 080h
- put_onmousemove dd ? ; 084h
- get_onmousemove dd ? ; 088h
- put_onmousedown dd ? ; 08Ch
- get_onmousedown dd ? ; 090h
- put_onmouseup dd ? ; 094h
- get_onmouseup dd ? ; 098h
- get_document dd ? ; 09Ch
- put_title dd ? ; 0A0h
- get_title dd ? ; 0A4h
- put_language dd ? ; 0A8h
- get_language dd ? ; 0ACh
- put_onselectstart dd ? ; 0B0h
- get_onselectstart dd ? ; 0B4h
- scrollIntoView dd ? ; 0B8h
- contains dd ? ; 0BCh
- get_sourceIndex dd ? ; 0C0h
- get_recordNumber dd ? ; 0C4h
- put_lang dd ? ; 0C8h
- get_lang dd ? ; 0CCh
- get_offsetLeft dd ? ; 0D0h
- get_offsetTop dd ? ; 0D4h
- get_offsetWidth dd ? ; 0D8h
- get_offsetHeight dd ? ; 0DCh
- get_offsetParent dd ? ; 0E0h
- put_innerHTML dd ? ; 0E4h
- get_innerHTML dd ? ; 0E8h
- put_innerText dd ? ; 0ECh
- get_innerText dd ? ; 0F0h
- put_outerHTML dd ? ; 0F4h
- get_outerHTML dd ? ; 0F8h
- put_outerText dd ? ; 0FCh
- get_outerText dd ? ; 100h
- insertAdjacentHTML dd ? ; 104h
- insertAdjacentText dd ? ; 108h
- get_parentTextEdit dd ? ; 10Ch
- get_isTextEdit dd ? ; 110h
- click dd ? ; 114h
- get_filters dd ? ; 118h
- put_ondragstart dd ? ; 11Ch
- get_ondragstart dd ? ; 120h
- toString dd ? ; 124h
- put_onbeforeupdate dd ? ; 128h
- get_onbeforeupdate dd ? ; 12Ch
- put_onafterupdate dd ? ; 130h
- get_onafterupdate dd ? ; 134h
- put_onerrorupdate dd ? ; 138h
- get_onerrorupdate dd ? ; 13Ch
- put_onrowexit dd ? ; 140h
- get_onrowexit dd ? ; 144h
- put_onrowenter dd ? ; 148h
- get_onrowenter dd ? ; 14Ch
- put_ondatasetchanged dd ? ; 150h
- get_ondatasetchanged dd ? ; 154h
- put_ondataavailable dd ? ; 158h
- get_ondataavailable dd ? ; 15Ch
- put_ondatasetcomplete dd ? ; 160h
- get_ondatasetcomplete dd ? ; 164h
- put_onfilterchange dd ? ; 168h
- get_onfilterchange dd ? ; 16Ch
- get_children dd ? ; 170h
- get_all dd ? ; 174h
- ends
Code (Assembler) : Убрать нумерацию
- ; Получить объект загруженной страницы
- mov eax,[pBrowser]
- mov eax,[eax]
- stdcall dword [eax+IWebBrowser2.get_Document],[pBrowser],\
- pDocument
- mov eax,[pDocument]
- mov eax,[eax]
- stdcall dword [eax+IWebBrowser2.QueryInterface],[pDocument],\
- IID_IHTMLDocument2,pHtmlDocument
- ; Получить объект тега BODY
- mov eax,[pHtmlDocument]
- mov eax,[eax]
- stdcall dword [eax+IHTMLDocument2.get_body],[pHtmlDocument],\
- pBodyElement
- ; Получить объект корневого тега
- mov eax,[pBodyElement]
- mov eax,[eax]
- stdcall dword [eax+IHTMLElement.get_parentElement],\
- [pBodyElement],pRootElement
- ; Получить содержимое корневого тега страницы
- mov eax,[pRootElement]
- mov eax,[eax]
- stdcall dword [eax+IHTMLElement.get_outerHTML],[pRootElement],\
- bStr
- ; [bStr] -> указатель на строку с исходным кодом страницы
- ; Прибраться за собой
- mov eax,[pRootElement]
- mov eax,[eax]
- stdcall dword [eax+IHTMLElement.Release],[pRootElement]
- mov eax,[pBodyElement]
- mov eax,[eax]
- stdcall dword [eax+IHTMLElement.Release],[pBodyElement]
- mov eax,[pHtmlDocument]
- mov eax,[eax]
- stdcall dword [eax+IHTMLDocument2.Release],[pHtmlDocument]
- mov eax,[pDocument]
- mov eax,[eax]
- stdcall dword [eax+IWebBrowser2.Release],[pDocument]
При получении исходного кода HTML-страницы вторым способом, используется метод get_documentElement интерфейса IHTMLDocument3. Работая с COM-объектами в Windows я уже немного привык, что интерфейсы с номерами на конце являются развитием своих более ранних версий, отличаются только GUID'ами и тем, что в них добавлены новые методы, причем строго в конец списка. В итоге можно просто взять интерфейс с самой старшей цифрой на конце и использовать его. Тут же интерфейс IHTMLDocument3 целиком и полностью отличается от IHTMLDocument2. То есть из-за нескольких методов, которые описаны в разных интерфейсах, вам придется создавать два объекта страницы и потом не запутаться в них. Браво, Microsoft!
Code (Assembler) : Убрать нумерацию
- ; GUID {3050F485-98B5-11CF-BB82-00AA00BDCE0B}
- IID_IHTMLDocument3 dd 03050F485h
- dw 098B5h
- dw 011CFh
- db 0BBh, 082h, 000h, 0AAh, 000h, 0BDh, 0CEh, 00Bh
- ; IID_IHTMLDocument3 Interface
- struct IHTMLDocument3
- ; IUnknown
- QueryInterface dd ? ; 000h
- AddRef dd ? ; 004h
- Release dd ? ; 008h
- ; IHTMLDocument3
- GetTypeInfoCount dd ? ; 00Ch
- GetTypeInfo dd ? ; 010h
- GetIDsOfNames dd ? ; 014h
- _Invoke dd ? ; 018h
- releaseCapture dd ? ; 01Ch
- recalc dd ? ; 020h
- createTextNode dd ? ; 024h
- get_documentElement dd ? ; 028h
- get_uniqueID dd ? ; 02Ch
- attachEvent dd ? ; 030h
- detachEvent dd ? ; 034h
- put_onrowsdelete dd ? ; 038h
- get_onrowsdelete dd ? ; 03Ch
- put_onrowsinserted dd ? ; 040h
- get_onrowsinserted dd ? ; 044h
- put_oncellchange dd ? ; 048h
- get_oncellchange dd ? ; 04Ch
- put_ondatasetchanged dd ? ; 050h
- get_ondatasetchanged dd ? ; 054h
- put_ondataavailable dd ? ; 058h
- get_ondataavailable dd ? ; 05Ch
- put_ondatasetcomplete dd ? ; 060h
- get_ondatasetcomplete dd ? ; 064h
- put_onpropertychange dd ? ; 068h
- get_onpropertychange dd ? ; 06Ch
- put_dir dd ? ; 070h
- get_dir dd ? ; 074h
- put_oncontextmenu dd ? ; 078h
- get_oncontextmenu dd ? ; 07Ch
- put_onstop dd ? ; 080h
- get_onstop dd ? ; 084h
- createDocumentFragment dd ? ; 088h
- get_parentDocument dd ? ; 08Ch
- put_enableDownload dd ? ; 090h
- get_enableDownload dd ? ; 094h
- put_baseUrl dd ? ; 098h
- get_baseUrl dd ? ; 09Ch
- get_childNodes dd ? ; 0A0h
- put_inheritStyleSheets dd ? ; 0A4h
- get_inheritStyleSheets dd ? ; 0A8h
- put_onbeforeeditfocus dd ? ; 0ACh
- get_onbeforeeditfocus dd ? ; 0B0h
- getElementsByName dd ? ; 0B4h
- getElementById dd ? ; 0B8h
- getElementsByTagName dd ? ; 0BCh
- ends
Code (Assembler) : Убрать нумерацию
- ; Получить объект загруженной страницы
- mov eax,[pBrowser]
- mov eax,[eax]
- stdcall dword [eax+IWebBrowser2.get_Document],[pBrowser],\
- pDocument
- mov eax,[pDocument]
- mov eax,[eax]
- stdcall dword [eax+IWebBrowser2.QueryInterface],[pDocument],\
- IID_IHTMLDocument3,pHtmlDocument
- ; Получить объект корневого тега
- mov eax,[pHtmlDocument]
- mov eax,[eax]
- stdcall dword [eax+IHTMLDocument3.get_documentElement],\
- [pHtmlDocument],pRootElement
- ; Получить содержимое корневого тега страницы
- mov eax,[pRootElement]
- mov eax,[eax]
- stdcall dword [eax+IHTMLElement.get_outerHTML],[pRootElement],\
- bStr
- ; [bStr] -> указатель на строку с исходным кодом страницы
- ; Прибраться за собой
- mov eax,[pRootElement]
- mov eax,[eax]
- stdcall dword [eax+IHTMLElement.Release],[pRootElement]
- mov eax,[pHtmlDocument]
- mov eax,[eax]
- stdcall dword [eax+IHTMLDocument3.Release],[pHtmlDocument]
- mov eax,[pDocument]
- mov eax,[eax]
- stdcall dword [eax+IWebBrowser2.Release],[pDocument]
Code (Assembler) : Убрать нумерацию
- ; Получить объект загруженной страницы
- mov eax,[pBrowser]
- mov eax,[eax]
- stdcall dword [eax+IWebBrowser2.get_Document],[pBrowser],\
- pDocument
- mov eax,[pDocument]
- mov eax,[eax]
- stdcall dword [eax+IWebBrowser2.QueryInterface],[pDocument],\
- IID_IHTMLDocument3,pHtmlDocument
- ; Прибраться за собой
- mov eax,[pDocument]
- mov eax,[eax]
- stdcall dword [eax+IWebBrowser2.Release],[pDocument]
- ; Получить коллекцию тегов <H1>
- mov eax,[pHtmlDocument]
- mov eax,[eax]
- stdcall dword [eax+IHTMLDocument3.getElementsByTagName],\
- [pHtmlDocument],szTag,pTags
- ; Получить количество тегов
- mov eax,[pTags]
- mov eax,[eax]
- stdcall dword [eax+IHTMLElementCollection.get_length],\
- [pTags],dLen
- ; Коллекция не пустая?
- cmp [dLen],0
- je loc_skip
- xor ebx,ebx
- loc_next_element:
- mov [dummy.vt],VT_I4
- mov [dummy.lVal],ebx
- ; Получить очередной элемент из коллекции
- mov eax,[pTags]
- mov eax,[eax]
- ; Структуры передаются целиком на стек, а не по указателю
- stdcall dword [eax+IHTMLElementCollection.item],[pTags],\
- dword[dummy],dword[dummy+4],\
- dword[dummy+8],dword[dummy+12],\
- dword[dummy],dword[dummy+4],\
- dword[dummy+8],dword[dummy+12],\
- pTag
- ; Получить его интерфейс IHTMLElement
- mov eax,[pTag]
- mov eax,[eax]
- stdcall dword [eax+IDispatch.QueryInterface],[pTag],\
- IID_IHTMLElement,pElement
- ; Получить содержимое тега
- mov eax,[pElement]
- mov eax,[eax]
- stdcall dword [eax+IHTMLElement.get_innerHTML],[pElement],bStr
- ; [bStr] -> указатель на строку с содержимым тега
- invoke SysFreeString,[bStr]
- ; Прибраться за собой
- mov eax,[pElement]
- mov eax,[eax]
- stdcall dword [eax+IHTMLElement.Release],[pElement]
- ; Следующий элемент в коллекции
- inc ebx
- cmp ebx,[dLen]
- jb loc_next_element
- ; Прибраться за собой
- mov eax,[pTags]
- mov eax,[eax]
- stdcall dword [eax+IHTMLElementCollection.Release],[pTags]
- loc_skip:
- ; Прибраться за собой
- mov eax,[pHtmlDocument]
- mov eax,[eax]
- stdcall dword [eax+IHTMLDocument3.Release],[pHtmlDocument]
Когда нужный элемент будет найден, при помощи различных методов интерфейса IHTMLElement можно извлечь из него необходимую информацию, например, идентификатор тега, название тега, содержимое, атрибуты и все прочее, что обычно извлекается со страницы средствами JavaScript. Также часть атрибутов элемента можно изменить и даже передать ему некоторые команды. Как видите, полноценный парсинг HTML-страниц на чистом Ассемблере - это не такая уж и фантастика.
Для взаимодействия со страницей, как это делает обычный браузер, используется интерфейс IOleCommandTarget. Придется дополнить список GUID'ов, констант и интерфейсов.
Code (Assembler) : Убрать нумерацию
- ; GUID {ED016940-BD5B-11CF-BA4E-00C04FD70816}
- CGID_IWebBrowser \
- dd 0ED016940h
- dw 0BD5Bh
- dw 011CFh
- db 0BAh, 04Eh, 000h, 0C0h, 04Fh, 0D7h, 008h, 016h
- ; GUID {B722BCCB-4E68-101B-A2BC-00AA00404770}
- IID_IOleCommandTarget \
- dd 0B722BCCBh
- dw 04E68h
- dw 0101Bh
- db 0A2h, 0BCh, 000h, 0AAh, 000h, 040h, 047h, 070h
- ; IID_IOleCommandTarget Interface
- struct IOleCommandTarget
- ; IUnknown
- QueryInterface dd ? ; 000h
- AddRef dd ? ; 004h
- Release dd ? ; 008h
- ; IOleCommandTarget
- QueryStatus dd ? ; 00Ch
- Exec dd ? ; 010h
- ends
- OLECMDEXECOPT_DODEFAULT = 0
- OLECMDEXECOPT_PROMPTUSER = 1
- OLECMDEXECOPT_DONTPROMPTUSER = 2
- HTMLID_FIND = 1
- HTMLID_VIEWSOURCE = 2
- HTMLID_OPTIONS = 3
Code (Assembler) : Убрать нумерацию
- ; Получить интерфейс IOleCommandTarget
- mov eax,[pDocument]
- mov eax,[eax]
- stdcall dword [eax+IWebBrowser2.QueryInterface],[pDocument],\
- IID_IOleCommandTarget,pCmd
- ; Выполнить команду "Исходный код страницы"
- mov eax,[pCmd]
- mov eax,[eax]
- stdcall dword [eax+IOleCommandTarget.Exec],[pCmd],\
- CGID_IWebBrowser,\
- HTMLID_VIEWSOURCE,\
- OLECMDEXECOPT_DODEFAULT,\
- NULL,NULL
- ; Прибраться за собой
- mov eax,[pCmd]
- mov eax,[eax]
- stdcall dword [eax+IOleCommandTarget.Release],[pCmd]
В приложении примеры программ с исходными текстами, которые реализуют способы получения информации из HTML-страниц, описанные в статье.
Просмотров: 808 | Комментариев: 3
Внимание! Статья опубликована больше года назад, информация могла устареть!
Добавить комментарий
Заполните форму для добавления комментария