// HtmlWeb.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <atlbase.h>
#include <MsHTML.h>
#include <oleacc.h>
#pragma comment(lib,"oleacc.lib")
int main()
{
BSTR sztitle;
long lFramesLength = ;
HWND hwnd = (HWND);
HRESULT hr = ::CoInitialize(NULL);
UINT nMsg = ::RegisterWindowMessage(_T("WM_HTML_GETOBJECT"));
LRESULT result;
SendMessageTimeout(hwnd, nMsg, 0l, 0l, SMTO_ABORTIFHUNG, , (PDWORD)&result);
CComPtr <IHTMLDocument2> spDoc;
hr = ::ObjectFromLresult(result, IID_IHTMLDocument2, , (LPVOID *)&spDoc);
if (SUCCEEDED(hr))
{
CComPtr<IHTMLFramesCollection2> frames;
CComPtr<IHTMLElementCollection> ElementCoole;
spDoc->get_URL(&sztitle);
wprintf_s(L"title:%s\r\n", sztitle);
spDoc->get_cookie(&sztitle);
wprintf_s(L"title:%s\r\n", sztitle);
hr = spDoc->get_forms(&ElementCoole);
if (SUCCEEDED(hr))
{
hr = ElementCoole->get_length(&lFramesLength);
if (SUCCEEDED(hr))
{
VARIANT varIndex, varResult;
VariantInit(&varIndex);
VariantInit(&varResult);
varResult.vt = VT_I4;
varResult.vt = VT_I4;
IDispatch *pDispatch;
for (long i =;i<lFramesLength;i++)
{
varIndex.lVal = i;
if (ElementCoole->item(varIndex, varResult, &pDispatch) == S_OK)
{
CComQIPtr<IHTMLFormElement> spFormElement = pDispatch;
pDispatch->Release();
spFormElement->get_name(&sztitle);
wprintf_s(L"title:%s\r\n", sztitle);
IDispatch* spInputElement;
hr = spFormElement->get_length(&lFramesLength);
if (SUCCEEDED(hr))
{
for (long k=;k<lFramesLength;k++)
{
if (spFormElement->item(CComVariant(k), CComVariant(), &spInputElement) == S_OK)
{
CComQIPtr<IHTMLInputElement> spInputEle = spInputElement;
spInputElement->Release();
BSTR vName, vVal, vType; //取得表单域的 名,值,类型
hr = spInputEle->get_name(&vName);
if (FAILED(hr))
continue;
hr = spInputEle->get_type(&vType);
if (FAILED(hr))
continue;
hr = spInputEle->get_value(&vVal);
if (FAILED(hr))
continue;
wprintf_s(L"name:%s \t value:%s \t type:%s \r\n", vName,vVal,vType);
}
}
}
}
}
}
}
#if 0
hr = spDoc->get_frames(&frames);
if (SUCCEEDED(hr))
{
VARIANT varIndex, varResult;
VariantInit(&varIndex);
VariantInit(&varResult);
varIndex.vt = VT_I4;
varResult.vt = VT_DISPATCH;
IDispatch *pDispatch;
hr = frames->get_length(&lFramesLength);
if (SUCCEEDED(hr))
{
for (long i = ; i < lFramesLength; i++)
{
varIndex.lVal = i;
hr = frames->item(&varIndex, &varResult);
if (SUCCEEDED(hr))
{
pDispatch = varResult.pdispVal;
}
}
} }
#endif
}
::CoUninitialize();
return ;
}

IE框架表单遍历的更多相关文章

  1. tp框架表单提交注意!不要提交到当前方法

    tp框架  表单提交到当前方法,会重复执行显示部分和保存部分的代码.导致不知名的错误.

  2. tp框架表单验证

    之前的表单验证都是用js写的,这里也可以使用tp框架的验证.但是两者比较而言还是js验证比较好,因为tp框架验证会运行后台代码,这样运行速度和效率就会下降. 自动验证是ThinkPHP模型层提供的一种 ...

  3. Yii 框架表单验证---实例

  4. tp框架表单验证 及ajax

    之前的表单验证都是用js写的,这里也可以使用tp框架的验证.但是两者比较而言还是js验证比较好,因为tp框架验证会运行后台代码,这样运行速度和效率就会下降. 自动验证是ThinkPHP模型层提供的一种 ...

  5. django-orm框架表单的增删改查

    08.14自我总结 django-orm框架 一.orm基本配置 1.创建django项目 命令行:cmd先去到django创建目录,然后输入django-admin startproject dja ...

  6. 第48天学习打卡(HTML 行内元素和块元素 列表 表格 视频和音频 页面结构分析 iframe内联框架 表单语法 )

    行内元素和块元素 块元素 ​ 无论内容多少,该元素独占一行 ​ (p.h1-h6) 行内元素 ​ 内容撑开宽度,左右都是行内元素的可以排在一行 ​ (a.strong.em...) 列表 什么是列表 ...

  7. ThinkPHP框架表单验证

    对注册到test表的表单进行验证 在注册之前要对表单进行验证: 用户名非空验证,两次输入密码必须一致即相等验证,年龄在18~50之间即范围验证,邮箱格式正则验证. 自动验证是ThinkPHP模型层提供 ...

  8. php--yii框架表单验证

    在视图层利用表单小部件生成表单时,field只能是数据库中存在的, 例如: use yii\helpers\Html; use yii\widgets\ActiveForm; use yii\capt ...

  9. laravel框架——表单验证

    创建路由 Route::get('test','VerController@index'); Route::post('tosubmit','VerController@tosubmit'); 在控制 ...

随机推荐

  1. redhat6.5安装oracle11_2R

    参照前人一步一步操作: http://leihenzhimu.blog.51cto.com/3217508/1685164 遇到如下错误: This is a prerequisite conditi ...

  2. 设计模式 - 工厂模式(factory pattern) 具体解释

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u012515223/article/details/27081511 工厂模式(factory pa ...

  3. Where是深复制

    从一个List中通过Where过滤出来的子List或Fist出来的单独元素,与原List是深复制关系.也就是说修改子list,或单独元素,并不会影响原List中的对象. 如:Geom g = Geom ...

  4. 2018-8-10-WPF-修改按钮按下的颜色

    title author date CreateTime categories WPF 修改按钮按下的颜色 lindexi 2018-08-10 19:16:53 +0800 2018-03-15 2 ...

  5. 一条数据的漫游 -- X-Engine SIGMOD Paper Introduction

    大多数人追寻永恒的家园(归宿),少数人追寻永恒的航向. ----瓦尔特.本雅明 背景 X-Engine是阿里数据库产品事业部自研的OLTP数据库存储引擎,作为自研数据库POLARDB X的存储引擎,已 ...

  6. 全文索引——CONTAINS 语法

    Like直接在数据据中查找可以查到所有所需记录但是会扫描整个表会影响性能CONTAINS是基于全文索引进行查询,查询结果受系统全文索引分词的方法影响查询结果会不全.Select * FROM A Wh ...

  7. oracle SELECT子句中避免使用 ‘ * ‘

    当你想在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用 ‘*’ 是一个方便的方法. 不幸的是,这是一个非常低效的方法. 实际上,ORACLE在解析的过程中, 会将’*’ 依次转换成所 ...

  8. .net core 文件下载

    public IActionResult Dowanload(string id,int numTypes) { try { var memory = new MemoryStream(): //mo ...

  9. ip2long与long2IP 分析

    <?php $ip='47.93.97.127'; $long=sprintf("%u",ip2long($ip));//string(9) "794648959& ...

  10. Vue中computed与method的区别

    转载于:https://segmentfault.com/a/1190000014478664?utm_source=tag-newest 1.computed区别于method的两个核心 在官方文档 ...