C#獲得IE進程內的IDocument對象代碼
class Win32API
{
[DllImport("user32", EntryPoint = "RegisterWindowMessage")]
public static extern int RegisterWindowMessage(
string lpString
);
[DllImport("user32", EntryPoint = "SendMessage")]
public static extern int SendMessage(
int hwnd,
int wMsg,
int wParam,
ref int lParam
);
[DllImport("OLEACC.DLL", EntryPoint = "ObjectFromLresult")]
public static extern int ObjectFromLresult(
int lResult,
ref System.Guid riid,
int wParam,
[System.Runtime.InteropServices.MarshalAs(UnmanagedType.Interface),System.Runtime.InteropServices.In, System.Runtime.InteropServices.Out]ref System.Object ppvObject
//注意這個函數ObjectFromLresult的聲明.
);
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
System.Object domObject = new System.Object();
int tempInt=0;
System.Guid guidIEDocument2 = new Guid(); //應該是IHtmlDocument2的接口id
int WM_Html_GETOBJECT = Win32API.RegisterWindowMessage("WM_Html_GETOBJECT");
//開始查找指定的IE窗體
int hwnd = 0x30784; //IExplorer server的句柄,在實際運行中需要用findwind得到
int W = Win32API.SendMessage(hwnd, WM_Html_GETOBJECT, 0, ref tempInt);
int lreturn = Win32API.ObjectFromLresult(W, ref guidIEDocument2, 0, ref domObject);
mshtml.IHTMLDocument2 doc = (mshtml.IHtmlDocument2)domObject;
}
}