• C#获取类名为Internet_Explorer_Server控件的内容


    为了让大家都能够使用demo,我以IE为测试对象,另外为了突出重点,所以如何获取窗口句柄我就不做演示了(不清楚的童鞋,可以去Google下哈),句柄值我使用spy++获得

          大家可以下载demo(附:spy++)到本地进行调试学习,希望这篇文章对大家有所帮助

    知识点:

    1.Internet_Explorer_Server

    2.msthml

    3.API:RegisterWindowMessage

    4.API:ObjectFromLresult

    复制代码
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;
    using System.Diagnostics;
    using System.Threading;
    using mshtml;
    
    namespace 获取类名Internet_Explorer_Server控件的内容
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            private void button1_Click(object sender, EventArgs e)
            {
                if(String.IsNullOrEmpty(tbHandle.Text))
                {
                    MessageBox.Show("请写好窗口类名为:Internet Explorer_Server的窗口句柄");
                    return;
                }
                mshtml.IHTMLDocument2 id = GetHtmlDocument(int.Parse(tbHandle.Text));
                textBox1.Text = id.body.innerHTML;
            }      
    
            class Win32API
            {
                [DllImport("user32", EntryPoint = "SendMessage")]
                public static extern int SendMessage(int hwnd, int wMsg, int wParam, ref int lParam);
    
                [DllImport("user32", EntryPoint = "RegisterWindowMessage")]
                public static extern int RegisterWindowMessage(string lpString);
    
                [DllImport("OLEACC.DLL", EntryPoint = "ObjectFromLresult")]
                public static extern int ObjectFromLresult(
                    int lResult,
                    ref System.Guid riid,
                    int wParam,
                    [MarshalAs(UnmanagedType.Interface), System.Runtime.InteropServices.In, System.Runtime.InteropServices.Out]ref System.Object ppvObject
                    //注意这个函数ObjectFromLresult的声明
                );
            }
    
            public mshtml.IHTMLDocument2 GetHtmlDocument(int hwnd)
            {
                System.Object domObject = new System.Object();
                int tempInt = 0;
                System.Guid guidIEDocument2 = new Guid();
                int WM_Html_GETOBJECT =Win32API.RegisterWindowMessage("WM_Html_GETOBJECT");//定义一个新的窗口消息
                int W = Win32API.SendMessage(hwnd, WM_Html_GETOBJECT, 0, ref tempInt);//注:第二个参数是RegisterWindowMessage函数的返回值
                int lreturn = Win32API.ObjectFromLresult(W, ref guidIEDocument2, 0, ref domObject);
                mshtml.IHTMLDocument2 doc = (mshtml.IHTMLDocument2)domObject;
                return doc;
            }
        }
    }
    复制代码

    这里,我以IE打开的百度首页为测试对象,效果如下:


  • 相关阅读:
    Longest Subsequence CodeForces
    Alyona and towers CodeForces
    Electric Charges CodeForces
    Array GCD CodeForces
    笔记(模拟)
    城堡 (spfa+cheng)
    YOU ARE MY SUNSHINE
    AC日记——潜伏者 洛谷 P1071 (模拟)
    AC日记——神奇的幻方 洛谷 P2615(大模拟)
    AC日记——机器翻译 洛谷 P1540
  • 原文地址:https://www.cnblogs.com/soundcode/p/10064405.html
Copyright © 2020-2023  润新知