zoukankan      html  css  js  c++  java
  • 获取基于Internet Explorer_Server的聊天窗口内容

    假设在得到窗体中控件的句柄(通过SPY++)的前提下,如果是像文本框这种控件,只要用SendMessage就可得到文本了,但是对于聊天记录窗口却行不通(返回空值),因为那其实是一个内置浏览器Internet Explorer_Server 

    经查询,可用以下方式获取:

    先引用:mshtml

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Runtime.InteropServices;
    using mshtml;
     
       [Flags]
        public enum SendMessageTimeoutFlags : uint
        {
            SMTO_NORMAL = 0x0,
            SMTO_BLOCK = 0x1,
            SMTO_ABORTIFHUNG = 0x2,
            SMTO_NOTIMEOUTIFNOTHUNG = 0x8
        }
     
    public class WinAPI 
    {
            [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
            static extern uint RegisterWindowMessage(string lpString);      
     
            [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
            private static extern IntPtr SendMessageTimeout(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam, SendMessageTimeoutFlags flags, uint timeout, out UIntPtr result);
     
            [DllImport("oleacc.dll", PreserveSig = false)]
            [return: MarshalAs(UnmanagedType.Interface)]
            private static extern object ObjectFromLresult(UIntPtr lResult, [MarshalAs(UnmanagedType.LPStruct)] Guid refiid, IntPtr wParam);
     
            public IHTMLDocument2 GetHtmlDocument(IntPtr hWnd)
            {           
                uint lMsg = RegisterWindowMessage("WM_HTML_GETOBJECT");
     
                UIntPtr lRes;         
                SendMessageTimeout(hWnd, lMsg, IntPtr.Zero, IntPtr.Zero, SendMessageTimeoutFlags.SMTO_ABORTIFHUNG, 1000, out lRes);
     
                IHTMLDocument2 htmlDoc = null;
                if (lRes != UIntPtr.Zero)
                {
                    htmlDoc = (IHTMLDocument2)ObjectFromLresult(lRes, typeof(IHTMLDocument2).GUID, IntPtr.Zero);
                }
     
                return htmlDoc;
            }
     
            public string GetWebText(IntPtr hWnd)
            {
                IHTMLDocument2 htmlDoc = GetHtmlDocument(hWnd);
                if (htmlDoc != null)
                {
                    return htmlDoc.body.innerHTML;
                }
                else
                {
                    return string.Empty;
                }
            }
    }
  • 相关阅读:
    【sqlite】3.ADO.NET实体数据模型增删改查
    【sqlite】1.Vs2019 ado.net实体模型安装教程
    【sqlite】2.Nuget下载好Sqlite.EF6后出现运行报错处理办法
    WPF-数据绑定:日期时间格式
    Entity Framework Database.SetInitializer的几种参数
    收藏
    Sql时间函数
    SQL中的循环、for循环、游标
    C# DateTime 时间格式
    js setInterval()函数 [倒计时用]
  • 原文地址:https://www.cnblogs.com/siso/p/3692486.html
Copyright © 2011-2022 走看看