C#通过API实现跨进程得到浏览器对象
C# 源代码,通过API实现跨进程得到浏览器对象,然后就可以进行下一步操作。
| 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 |
浙公网安备 33010602011771号