我想找到当前IE(7)当前的文档对象,已有部分代码,请求大家帮忙!C#_WinFrom
我的需求,获取当前IE窗口的IHTMLDocument2对象来操作IE文档,如果是IE7,因为有多个Tab的情况,需要找到当前的IHTMLDocument2对象
问题:怎样找到当前IE窗口及当前的IHTMLDocument2对象呢?
已有代码提示:
SHDocVw.WebBrowser m_browser = null;
SHDocVw.ShellWindows shellWindows = new SHDocVw.ShellWindowsClass();
string filename;
foreach (SHDocVw.WebBrowser ie in shellWindows)
{
filename = Path.GetFileNameWithoutExtension(ie.FullName).ToLower();
if (filename.Equals( "iexplore "))
{
m_browser = ie;
break;
}
}
mshtml.IHTMLDocument2 myDoc = (mshtml.IHTMLDocument2)m_browser.Document;
但这种方式获取到的IHTMLDocument2不一定是当前激活Tab的IE7的文档,
IntPtr hwnd = (IntPtr)m_browser.HWND;
hwnd = FindWindowEx(hwnd, IntPtr.Zero, "TabWindowClass ", IntPtr.Zero);
IntPtr HchildWND = FindWindowEx(hwnd, (IntPtr)0, "Shell DocObject View ", IntPtr.Zero);
if (HchildWND != (IntPtr)0)
{
string c = "Internet Explorer_Server ";
HchildWND = FindWindowEx(HchildWND, (IntPtr)0, c, IntPtr.Zero);
}
到这一步可以访问到当前文档窗口的句柄,但是接下来该如何通过这个句柄获得IHTMLDocument2对象呢?
请各位高手支招,给出有效代码或者参考的的给分,谢谢阿
------解决方案--------------------up
------解决方案--------------------
------解决方案--------------------分...
------解决方案--------------------up
------解决方案--------------------public static IHTMLDocument2 GetDomFromHwnd(IntPtr hwnd)
{
object obj1 = RuntimeHelpers.GetObjectValue(new object());
Guid guid1 = new Guid( "626FC520-A41E-11CF-A731-00A0C9082637 ");
string text1 = "WM_Html_GETOBJECT ";
int num2 = RegisterWindowMessage(ref text1);
if (num2 == 0)
{
throw new Exception( "Unable to register windows message in getDOMFromHwnd() ");
}
IntPtr ptr1 = SendMessage(hwnd, num2, IntPtr.Zero, IntPtr.Zero);
int num1 = ObjectFromLresult(ptr1, ref guid1, IntPtr.Zero, out obj1);
if (num1 != 0)
{
throw new Exception( "Unable to get IE DOM from window message result in getDOMFromHwnd() ");
}
return (IHTMLDocument2)obj1;
}