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. Client 客户端AspNetCore.SignalR 通讯服务器 Quartz 执行任务

    背景 需要Client跑服务在终端间隔执行任务,我的目标是运行在树莓派上 Client代码 如果未连接成功时隔3秒重新连接服务器 public static void Reconnect() { va ...

  2. android studio学习----Android Studio导入github下载的工程--替换方法

    http://www.cnblogs.com/liuling/p/2015-9-16-01.html 这种方法是可行的,主要是先自己创建一个project ,然后把没有的文件夹都复制过去就OK了,特别 ...

  3. Android源码分析(九)-----如何修改Android系统默认时间

    一 : 修改Android系统默认时间 源码路径:frameworks/base/services/java/com/android/server/SystemServer.java 主要变量EARL ...

  4. 掌握 Async/Await

    摘要: 还不用Async/Await就OUT了.. 原文:掌握 Async/Await 作者:Jartto Fundebug经授权转载,版权归原作者所有. 前端工程师肯定都经历过 JS 回调链狱的痛苦 ...

  5. MySQL 错误代码:2003 idea错误:ERROR DruidDataSource:1846 - create connection error

    idea项目一启动就报错: 20:01:13,047 ERROR DruidDataSource:1846 - create connection error com.mysql.jdbc.excep ...

  6. php导出数据到多个csv并打包压缩

    1.不压缩直接下载 // 测试php导出大量数据到csv public function actionExportData() { // 设置不超时 set_time_limit(0); // 设置最 ...

  7. CentOS7下firewall-cmd防火墙使用

    一. firewalld的基本使用启动: systemctl start firewalld查状态:systemctl status firewalld 停止: systemctl disable f ...

  8. java String 常用方法

    String方法 class CeShi{ public static void main(String[] args) { //toCharArray char chararraryone[]=&q ...

  9. No qualifying bean of type 'com.chinanums.agent.operation.service.component.OperationPageComponent' available:

    java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.conte ...

  10. 十大排序算法总结(Python3实现)

    十大排序算法总结(Python3实现) 本文链接:https://blog.csdn.net/aiya_aiya_/article/details/79846380 目录 一.概述 二.算法简介及代码 ...