http://www.soaspx.com/dotnet/csharp/csharp_20091009_821.html
1 using System;
 2 using System.Runtime.InteropServices;
 3 using mshtml;
 4 
 5 class Win32API {
 6     [DllImport("user32.dll", EntryPoint = "FindWindow")]
 7     public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
 8     [DllImport("user32.dll", EntryPoint = "FindWindowEx")]
 9     public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
10     [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
11     public static extern uint RegisterWindowMessage(string lpString);
12     [DllImport("oleacc.dll", PreserveSig = false)]
13     [return: MarshalAs(UnmanagedType.Interface)]
14     public static extern object ObjectFromLresult(UIntPtr lResult, [MarshalAs(UnmanagedType.LPStruct)] Guid refiid, IntPtr wParam);
15     [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
16     public static extern IntPtr SendMessageTimeout(IntPtr hWnd, uint Msg, UIntPtr wParam, IntPtr lParam, SendMessageTimeoutFlags fuFlags, uint uTimeout, out UIntPtr lpdwResult);
17 
18     public enum SendMessageTimeoutFlags : uint {
19         SMTO_NORMAL = 0x0000,
20         SMTO_BLOCK = 0x0001,
21         SMTO_ABORTIFHUNG = 0x0002,
22         SMTO_NOTIMEOUTIFNOTHUNG = 0x0008
23     }
24 }
25 
26 public class IEWindow {
27     public static HTMLDocumentClass GetIEWindowDocument(string windowName) {
28         UIntPtr lRes = new UIntPtr();
29         IntPtr parentHWnd = Win32API.FindWindow("IEFrame", windowName);
30         IntPtr editHWnd = Win32API.FindWindowEx(parentHWnd, IntPtr.Zero, "TabWindowClass", windowName); //需要查找的子窗口的类名,也就是输入框
31         IntPtr editHWnd1 = Win32API.FindWindowEx(editHWnd, IntPtr.Zero, "Shell DocObject View", ""); //需要查找的子窗口的类名,也就是输入框
32         IntPtr editHWnd2 = Win32API.FindWindowEx(editHWnd1, IntPtr.Zero, "Internet Explorer_Server", ""); //需要查找的子窗口的类名,也就是输入框
33 
34         uint app2_GenerateEvent = Win32API.RegisterWindowMessage("WM_HTML_GETOBJECT");
35         Win32API.SendMessageTimeout(editHWnd2, app2_GenerateEvent, UIntPtr.Zero, IntPtr.Zero, Win32API.SendMessageTimeoutFlags.SMTO_NOTIMEOUTIFNOTHUNG, 1000, out lRes);
36 
37         HTMLDocumentClass obj = (HTMLDocumentClass)Win32API.ObjectFromLresult(lRes, typeof(IHTMLDocument).GUID, IntPtr.Zero);
38         return obj;
39     }
40 }
41