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
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
解决方案 »
- 求一开源高性能,跨服务器的消息通知队列软件
- sessionstate的一点小疑问
- C#第三方控件
- 自定义报表
- 我的数据库列的数据是加密后的,对于C/S结构,如何取出来显示?如何单击一项显示详细信息,使用什么控件较好?
- 数据库表名与SQL关键词相同出现的问题
- 请问关于用C#打开excel问题
- C#和showModalDialog的问题,在先等待,立刻给分!
- 使用 C#+ASP.NET+SQLServer 建设的网站 www.chinadeer.com/index.aspx测试中!
- visual studio 工具箱里面的东东都成灰色
- 安装 visual assist X有个问题 急求解决方法
- HttpWebRequest不能发送cookies?
{}就可以了。
这里的参数windowName不知道是指什么,可以试试看看是不是Internet Explorer 或者Firefox之类的。