using System;
using System.Collections.Generic;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
using mshtml;
using SHDocVw; namespace WebClick_Tool
{
/// <summary>
/// IE浏览器操作
/// </summary>
public class IETool
{
/// <summary>
/// IE句柄
/// </summary>
public int IEHandle { get; set; }
/// <summary>
/// 浏览器
/// </summary>
public IWebBrowser2 IEBrowser { get; set; }
/// <summary>
/// 当前页面Document
/// </summary>
public HTMLDocumentClass Document { get; set; }
/// <summary>
/// 浏览器标头高度
/// </summary>
public int BrowserH { get; set; }
/// <summary>
/// 初始化是否成功
/// </summary>
public bool Suc { get; set; }
/// <summary>
/// 头部标题
/// </summary>
public string HeadTitle { get; set; }
/// <summary>
/// 失败头部标题
/// </summary>
public string BadHeadTitle { get; set; }
/// <summary>
/// 浏览器高度
/// </summary>
public int HeighBro { get; set; } public IETool(string HeadTitleO,string BadTitle)
{
HeadTitle = HeadTitleO;
BadHeadTitle = BadTitle;
HeighBro = -1;
if (GetHandleOfBrowser())
Suc = true;
else
Suc = false;
try
{
GetHtml(false);
}
catch { }
}
#region 系统API
/// <summary>
/// 找窗口句柄
/// </summary>
/// <param name="lpClassName"></param>
/// <param name="lpWindowName"></param>
/// <returns></returns>
[DllImport("user32", EntryPoint = "FindWindow")]
public static extern int FindWindowA(string lpClassName, string lpWindowName);
/// <summary>
/// 窗体发送消息
/// </summary>
/// <param name="hWnd"></param>
/// <param name="Msg"></param>
/// <param name="wParam"></param>
/// <param name="lParam"></param>
/// <returns></returns>
[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
#endregion
/// <summary>
/// 获取IE句柄
/// </summary>
/// <returns></returns>
private bool GetHandleOfBrowser()
{
IEHandle = FindWindowA("IEFrame", null);
if (IEHandle == 0)
return false;
else
return true;
}
/// <summary>
/// IE窗体最大化
/// </summary>
public void SetMaxStyle(int Handle)
{
SendMessage(new IntPtr((Handle != 0 ? Handle : IEHandle)), 274, 61488, 0);
}
/// <summary>
/// 获取源代码
/// </summary>
/// <returns></returns>
public string GetHtml(bool Sacn)
{
string TempStr = "";
//初始化所有IE窗口
IShellWindows sw = new ShellWindowsClass();
for (int i = sw.Count - 1; i >= 0; i--)
{
//得到每一个IE的 IWebBrowser2 对象
IWebBrowser2 iwb2 = sw.Item(i) as IWebBrowser2;
//比对 得到的 句柄是否符合查找的窗口句柄
if (iwb2!=null&&iwb2.HWND == IEHandle)
{
Document = (HTMLDocumentClass)iwb2.Document;
if(Sacn)
if ((Document == null || Document.title == null || Document.title != HeadTitle) && !Document.title.Contains(BadHeadTitle))
{
continue;
} iwb2.StatusBar = false;//状态栏
SendMessage(new IntPtr(iwb2.HWND), 274, 61488, 0);
if (Document == null)
return "";
if (Document.title == "百度一下,你就知道" || Document.title == "360搜索 - 干净、安全、可信任的搜索引擎")
TempStr = "<!doctype html>" + ((HTMLDocumentClass)iwb2.Document).documentElement.outerHTML;
else
TempStr = ((HTMLDocumentClass)iwb2.Document).documentElement.outerHTML;
try
{
HeighBro = ((IHTMLElement2)Document.body).scrollHeight;
}
catch { }
break;
}
}
return TempStr;
} }
}

  

C# IE浏览器操作类的更多相关文章

  1. [转]html5 js 访问 sqlite 数据库的操作类

    本文转自:http://blog.csdn.net/tsxw24/article/details/7613815 webkit 核心的浏览器提供了 3个 api接口,用于访问本地sqlite数据,但使 ...

  2. [C#] 常用工具类——文件操作类

    /// <para> FilesUpload:工具方法:ASP.NET上传文件的方法</para> /// <para> FileExists:返回文件是否存在&l ...

  3. Java文件操作类效率对比

    前言 众所周知,Java中有多种针对文件的操作类,以面向字节流和字符流可分为两大类,这里以写入为例: 面向字节流的:FileOutputStream 和 BufferedOutputStream 面向 ...

  4. python3+selenium框架设计05-配置文件和浏览器引擎类

    python3配置文件的增删改查等操作可以使用内置的ConfigParser模块,可以自行百度学习,也可以看Python3学习笔记27-ConfigParser模块 配置文件一般存放着环境信息,比如u ...

  5. Cookie操作类、 包括创建、读取、修改、获取、销毁cookie

    Cookie操作类. 包括创建.读取.修改.获取.销毁cookie import java.util.Hashtable; import java.util.Iterator; import java ...

  6. File 文件操作类 大全

    File  文件操作类  大全 许多人都会对文件操作感到很难  我也是  但是一个好的项目中必定会涉及到文件操作的 文件的复制 粘贴  等等等 公司大佬写了 一个文件操作的工具类 感觉还是棒棒的啦   ...

  7. php socket通信演示以及socket操作类

    准备做Java的课程设计,一个通讯录.采用C/S架构.客户端用java FX和Java,服务器端用php,采用socket通信. 下面来讲一讲php的socket通信: 讲之前,得先讲一下TCP/IP ...

  8. 【知识必备】ezSQL,最好用的数据库操作类,让php操作sql更简单~

    最近用php做了点小东东,用上了ezSQL,感觉真的很ez,所以拿来跟大家分享一下~ ezSQL是一个非常好用的PHP数据库操作类.著名的开源博客WordPress的数据库操作就使用了ezSQL的My ...

  9. JQuery操作类数组的工具方法

    JQuery学习之操作类数组的工具方法 在很多时候,JQuery的$()函数都返回一个类似数据的JQuery对象,例如$('div')将返回div里面的所有div元素包装的JQuery对象.在这中情况 ...

随机推荐

  1. 为什么改了JS数组中的一个元素的值,其他数组元素值都跟着变了

    原因: 数组是引用类型,数组变量存储在栈,元素数据存储在堆中,将数组赋值不同的对象,所以的赋值对象都指向堆同一个数据,所以改变其中一个数组中的元素,别的数组元素也会改变. 解决方案: 原理就是先把数组 ...

  2. 我是如何一步步编码完成万仓网ERP系统的(十一)产品库设计 7.发布商品

    https://www.cnblogs.com/smh188/p/11533668.html(我是如何一步步编码完成万仓网ERP系统的(一)系统架构) https://www.cnblogs.com/ ...

  3. JAVA中的四种JSON解析方式详解

    JAVA中的四种JSON解析方式详解 我们在日常开发中少不了和JSON数据打交道,那么我们来看看JAVA中常用的JSON解析方式. 1.JSON官方 脱离框架使用 2.GSON 3.FastJSON ...

  4. QGraphicsItem鼠标旋转控制研究

    在QT场景视图中2D图形项Item的基类为QGraphicsItem,如果我们需要自定义Item则可以从其派生,然后重写boundingRect以及paint虚函数实现图形项的外边界定义以及内容绘制工 ...

  5. ASCII、Unicode、utf-8、utf-16、utf-32

    理解ASCII.Unicode.utf-8.utf-16.utf-32 目录 理解ASCII.Unicode.utf-8.utf-16.utf-32编码与解码字符集字符编码ASCIIUnicodeUT ...

  6. 使用conda安装tensorflow-gpu

    1.之前已经安装了anaconda,之前疏忽使用的pip安装的tensorflow,但pycharm还是使用的anaconda环境. 现在把pip的tensorflow删除了 pip uninstal ...

  7. AAC的RTP封装中的AU头分析

      解码器收到一个RTP的AAC流,发现RTP流里的音频里带有4个字节AU头,然后才是AAC的ADTS头.     这种情况之前已经出现过多次,每次我们都告知对方,不要往AAC前面加AU头,解码器不支 ...

  8. 随笔记录--RegExp类型

    阅读Javascript高级程序设计第五章 -- RegExp类型总结 对于基础教程部分, 有小伙伴不熟悉的,可以参考 正则表达式 - 教程 1. 基础部分回顾: ECMASript通过RegExp类 ...

  9. scikit-leanr 库中的 make_blobs() 函数

    sklearn.datasets.make_blobs() 是用于创建多类单标签数据集的函数,它为每个类分配一个或多个正态分布的点集. sklearn.datasets.make_blobs( n_s ...

  10. adb命令操作蓝牙

    打开和关闭蓝牙BT adb root adb shell svc bluetooth enable adb shell svc bluetooth disable UI层 查询:adb shell s ...