// 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. POJ-1125_Stockbroker Grapevine

    Stockbroker Grapevine Time Limit: 1000MS Memory Limit: 10000K Description Stockbrokers are known to ...

  2. PHP5.2 汉字json_encode

    //对汉字编码 private function url_encode($str) { if(is_array($str)) { foreach($str as $key=>$value) { ...

  3. win10 子系统 ubuntu 16.04 安装 docker

    2,更新系统软件 $ sudo apt-get update 3,安装依赖包 $ sudo apt-get install \ apt-transport-https \ ca-certificate ...

  4. [翻译]Python中yield的解释

    问题: Python中yield关键字的作用是什么?它做了什么? 例如,我想理解以下代码 def node._get_child_candidates(self, distance, min_dist ...

  5. 首次揭秘:阿里巴巴中间件在 Serverless 技术领域的探索

    Serverless 话题涉及范围极广,几乎包含了代码管理.测试.发布.运维和扩容等与应用生命周期关联的所有环节.AWS Lambda 是 Serverless 领域的标志性产品,但如果将其应用于核心 ...

  6. C# 递归、try

    一.递归 递归:在函数体内调用本函数自身,直到符合某一条件不再继续调用 两个需要满足的条件1.有反复调用自身函数的过程2.有函数的出口:有不再继续执行的条件 例子: 案例: (一).输入正整数n,求n ...

  7. Java开发中RMI和webservice区别和应用领域

    Java开发中RMI和webservice区别和应用领域 一.RMI和webservice区别和联系 0. 首先,都是远程调用技术. 1. RMI是在TCP协议上传递可序列化的java对象(使用Str ...

  8. PC端页面如何调用QQ进行在线聊天?

    pc端如何实现QQ在线咨询? html代码如下: <a href="tencent://message/?uin=1234567&Site=Sambow&Menu=ye ...

  9. 在HTML中的下拉框中怎样实现超连接?

    给你个例子自己改吧: <SELECT name="select" onchange="window.open(this.options[this.selectedI ...

  10. 在后台管理系统中引入富文本编辑器 (vue-quill-editor)

    在admin系统中引入富文本编辑器 (vue-quill-editor) 由于公司项目的需求,内容需要更新,那么自然需要admin后台来上传内容,在苦苦寻觅了N个编辑器之后,终于找到了一个比较容易使用 ...