删除下行语句的注释,把浏览器的背景改变看看

原创 2008年09月28日 09:25:00

http://spaces.live.com/thinkpad2008/blog/cns!C05A98D6BF33AA07!142.entry?_c11_blogpart_blogpart=blogview&_c=blogpart

 

以后常来我那里看看哦~~:)
发布者 樱桃小茜 (http://spaces.msn.com/members/lovelycat916/) - 12月11日 22:03
// EnumFormVal.h

#if !defined(AFX_ENUMFORMVAL_H__B4FA56C3_DC0C_42AF_9216_238741558ED4__INCLUDED_)

#define AFX_ENUMFORMVAL_H__B4FA56C3_DC0C_42AF_9216_238741558ED4__INCLUDED_



#if _MSC_VER > 1000

#pragma once



#endif // _MSC_VER > 1000



#include "resource.h"





#endif // !defined(AFX_ENUMFORMVAL_H__B4FA56C3_DC0C_42AF_9216_238741558ED4__INCLUDED_)



// EnumFormVal.cpp



#include "stdafx.h"

#include "EnumFormVal.h"



#include <atlbase.h>



CComModule _Module; // 由于要使用 CComDispatchDriver ATL的智能指针,

// 所以声明它是必须的



#include <mshtml.h> // 所有 IHTMLxxxx 的接口声明

#include <atlcom.h>



#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif



/////////////////////////////////////////////////////////////////////////////

// The one and only application object



using namespace std;



void EnumIE( void ); //枚举浏览器函数

void EnumFrame( IHTMLDocument2 * pIHTMLDocument2 ); //枚举子框架函数

void EnumForm ( IHTMLDocument2 * pIHTMLDocument2 ); //枚举表单函数



int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])

{

::CoInitialize(NULL); //初始化 COM 公寓



EnumIE(); //枚举浏览器



::CoUninitialize(); //释放 COM 公寓



cout << _T("======完成======") << endl;

getchar(); //等待回车



return 0;

}



void EnumIE( void )

{

cout << _T("开始扫描系统中正在运行的浏览器实例") << endl;



CComPtr< IShellWindows > spShellWin;

HRESULT hr = spShellWin.CoCreateInstance( CLSID_ShellWindows );

if ( FAILED ( hr ) )

{

cout << _T("获取 IShellWindows 接口错误") << endl;

return;

}



long nCount = 0; // 取得浏览器实例个数(Explorer 和 IExplorer)

spShellWin->get_Count( &nCount );

if( 0 == nCount )

{

cout << _T("没有在运行着的浏览器") << endl;

return;

}



for(int i=0; i<nCount; i++)

{

CComPtr< IDispatch > spDispIE;

hr=spShellWin->Item(CComVariant( (long)i ), &spDispIE );

if ( FAILED ( hr ) ) continue;



CComQIPtr< IWebBrowser2 > spBrowser = spDispIE;

if ( !spBrowser ) continue;



CComPtr < IDispatch > spDispDoc;

hr = spBrowser->get_Document( &spDispDoc );

if ( FAILED ( hr ) ) continue;



CComQIPtr< IHTMLDocument2 > spDocument2 = spDispDoc;

if ( !spDocument2 ) continue;



// 程序运行到此,已经找到了 IHTMLDocument2 的接口指针



// 删除下行语句的注释,把浏览器的背景改变看看

// spDocument2->put_bgColor( CComVariant( "green" ) );



EnumForm( spDocument2 ); //枚举所有的表单

}

}



void EnumFrame( IHTMLDocument2 * pIHTMLDocument2 )

{

if ( !pIHTMLDocument2 ) return;



HRESULT hr;



CComPtr< IHTMLFramesCollection2 > spFramesCollection2;

pIHTMLDocument2->get_frames( &spFramesCollection2 ); //取得框架frame的集合



long nFrameCount=0; //取得子框架个数

hr = spFramesCollection2->get_length( &nFrameCount );

if ( FAILED ( hr ) || 0 == nFrameCount ) return;



for(long i=0; i<nFrameCount; i++)

{

CComVariant vDispWin2; //取得子框架的自动化接口

hr = spFramesCollection2->item( &CComVariant(i), &vDispWin2 );

if ( FAILED ( hr ) ) continue;



CComQIPtr< IHTMLWindow2 > spWin2 = vDispWin2.pdispVal;

if( !spWin2 ) continue; //取得子框架的 IHTMLWindow2 接口



CComPtr < IHTMLDocument2 > spDoc2;

spWin2->get_document( &spDoc2 ); //取得字框架的 IHTMLDocument2 接口



EnumForm( spDoc2 ); //递归枚举当前子框架 IHTMLDocument2 上的表单form

}

}



void EnumForm( IHTMLDocument2 * pIHTMLDocument2 )

{

if( !pIHTMLDocument2 ) return;



EnumFrame( pIHTMLDocument2 ); //递归枚举当前 IHTMLDocument2 上的子框架fram



HRESULT hr;

CComBSTR bstrTitle;

pIHTMLDocument2->get_title( &bstrTitle ); //取得文档标题



USES_CONVERSION;

cout << _T("====================") << endl;

cout << _T("开始枚举“") << OLE2CT( bstrTitle ) << _T("”的表单") << endl;

cout << _T("====================") << endl;



CComQIPtr< IHTMLElementCollection > spElementCollection;

hr = pIHTMLDocument2->get_forms( &spElementCollection ); //取得表单集合

if ( FAILED( hr ) )

{

cout << _T("获取表单的集合 IHTMLElementCollection 错误") << endl;

return;

}



long nFormCount=0; //取得表单数目

hr = spElementCollection->get_length( &nFormCount );

if ( FAILED( hr ) )

{

cout << _T("获取表单数目错误") << endl;

return;

}



for(long i=0; i<nFormCount; i++)

{

IDispatch *pDisp = NULL; //取得第 i 项表单

hr = spElementCollection->item( CComVariant( i ), CComVariant(), &pDisp );

if ( FAILED( hr ) ) continue;



CComQIPtr< IHTMLFormElement > spFormElement = pDisp;

pDisp->Release();



long nElemCount=0; //取得表单中域 的数目

hr = spFormElement->get_length( &nElemCount );

if ( FAILED( hr ) ) continue;



for(long j=0; j<nElemCount; j++)

{

CComDispatchDriver spInputElement; //取得第 j 项表单域

hr = spFormElement->item( CComVariant( j ), CComVariant(), &spInputElement );

if ( FAILED( hr ) ) continue;



CComVariant vName,vVal,vType; //取得表单域的 名,值,类型

hr = spInputElement.GetPropertyByName( L"name", &vName );

if( FAILED( hr ) ) continue;

hr = spInputElement.GetPropertyByName( L"value", &vVal );

if( FAILED( hr ) ) continue;

hr = spInputElement.GetPropertyByName( L"type", &vType );

if( FAILED( hr ) ) continue;



LPCTSTR lpName = vName.bstrVal?

OLE2CT( vName.bstrVal ) : _T("NULL"); //未知域名

LPCTSTR lpVal = vVal.bstrVal?

OLE2CT( vVal.bstrVal ) : _T("NULL"); //空值,未输入

LPCTSTR lpType = vType.bstrVal?

OLE2CT( vType.bstrVal ) : _T("NULL"); //未知类型



cout << _T("[") << lpType << _T("] ");

cout << lpName << _T(" = ") << lpVal << endl;

}



}

}



六、运行结果:
发布者 jack (http://spaces.msn.com/members/thinkpad2008/) - 12月11日 21:13
发布评论
若要向此网站发布评论,您必须用 Microsoft Passport Network 登录。

HTML 5 中Web SQL 的使用示例

Web sql 是在浏览器模拟数据库,可以使用JS来操作SQL完成对数据的读写,但是这个东西目前支持的浏览器不多,而且其W3C规范已经停止支持,貌似其前景不是很明朗。 W3C 规范:http://ww...
  • zyuc_wangxw
  • zyuc_wangxw
  • 2014年10月28日 10:42
  • 2986

清除浏览器默认表单边框/背景特效和下拉菜单背景

大家应该都留意到类似谷歌和火狐浏览器中都会有自己默认的样式设置,比如谷歌浏览器所有的表单都会添加黄色边框特效。当网站本身就已经对于表单样式有一定的设计时,这种默认表单样式就会让人觉得多余了!这里我们介...
  • benben1164
  • benben1164
  • 2015年12月18日 11:15
  • 1733

修改Chrome浏览器默认背景颜色为浅绿色

修改Chrome浏览器默认背景颜色为浅绿色 猪的明天 / 懒得分类 / 2011.01.08 / 相关标签: css plugins 这几天公司在赶项目阶段,加了几天班眼睛感觉很累...
  • heyu158
  • heyu158
  • 2014年01月07日 14:09
  • 3089

Java统计目录文件下行数的总和,注释行数的总和,空行数总和

Java统计目录文件下代码行数的总和,注释行数的总和,空行数总和思路:首先要用递归遍历所有文件夹下的文件,然后记录统计出每一个文件的行数,注释行数,空行数。package com.sina;impor...
  • itmyhome
  • itmyhome
  • 2017年02月22日 23:13
  • 1060

【K&R 习题 1-23】删除C/C++语言中的程序中的所有注释语句

原题: 编写一个删除C语言程序中所有的注释语句。要正确处理带引号的字符串与字符常量。再C语言中,注释不允许嵌套。         题目的目的是要做一个简单的语法分析器,所使用的工具为状态机。...
  • yuezhiren
  • yuezhiren
  • 2012年09月08日 14:45
  • 3788

删除c语言中的所有注释语句

 原文链接:http://lixing123.com/archives/310 学习《C程序设计语言》到第1章最后,有一道题目: [html] view plaincopypri...
  • qlx846852708
  • qlx846852708
  • 2015年01月16日 10:57
  • 582

练习1-23 编写一个删除C语言程序中所有的注释语句。要正确处理带引号的字符串与字符常量

最简单情形/* abc */只出现在注释中 #include #define MAXCHAR 10000 char line[MAXCHAR]; int pos; int detnote(in...
  • Civil_CHOW
  • Civil_CHOW
  • 2016年06月01日 16:00
  • 390

C程序设计语言练习1-23 编写一个删除C语言程序中所有的注释语句

本程序运行后,将要求用户输入一个当前目录下的C源码程序文件名,读取后,将文件中的所有注释删除掉,然后另存为*_noc.ext文件,*中可以包含多个点,.ext可以为空(即没有文件扩展名)。...
  • ycjnx
  • ycjnx
  • 2017年06月23日 16:54
  • 716

删除C语言程序中所以的注释语句(有疑问)

     源自《The C Programming Language》P25 p1-23:     编写一个删除C语言程序中所以的注释语句。要正确处理带引号的字符串和字符常量。在C语言中,注释不允许嵌...
  • roma823
  • roma823
  • 2011年04月26日 17:21
  • 3944

一条语句改变对话框背景和文本颜色

CLabel类可以有选择地改变 Static 静态文本颜色、背景,或将静态文本设置为超链接,但如果对话框全部改成其它统一的背景色和文字颜色,在VC中则只需一条语句。 首先下载我做的示例源程序bgte...
  • Juano0o0
  • Juano0o0
  • 2012年10月11日 10:48
  • 522
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:删除下行语句的注释,把浏览器的背景改变看看
举报原因:
原因补充:

(最多只允许输入30个字)