C#通过API实现跨进程得到浏览器对象
C# 源代码,通过API实现跨进程得到浏览器对象,然后就可以进行下一步操作。
1usingSystem; 2usingSystem.Runtime.InteropServices; 3usingmshtml; 4 5classWin32API{ 6[DllImport("user32.dll",EntryPoint="FindWindow")] 7publicstaticexternIntPtrFindWindow(stringlpClassName,stringlpWindowName); 8[DllImport("user32.dll",EntryPoint="FindWindowEx")] 9publicstaticexternIntPtrFindWindowEx(IntPtrhwndParent,IntPtrhwndChildAfter,stringlpszClass,stringlpszWindow); 10[DllImport("user32.dll",SetLastError=true,CharSet=CharSet.Auto)] 11publicstaticexternuintRegisterWindowMessage(stringlpString); 12[DllImport("oleacc.dll",PreserveSig=false)] 13[return:MarshalAs(UnmanagedType.Interface)] 14publicstaticexternobjectObjectFromLresult(UIntPtrlResult,[MarshalAs(UnmanagedType.LPStruct)]Guidrefiid,IntPtrwParam); 15[DllImport("user32.dll",SetLastError=true,CharSet=CharSet.Auto)] 16publicstaticexternIntPtrSendMessageTimeout(IntPtrhWnd,uintMsg,UIntPtrwParam,IntPtrlParam,SendMessageTimeoutFlagsfuFlags,uintuTimeout,outUIntPtrlpdwResult); 17 18publicenumSendMessageTimeoutFlags:uint{ 19SMTO_NORMAL=0x0000, 20SMTO_BLOCK=0x0001, 21SMTO_ABORTIFHUNG=0x0002, 22SMTO_NOTIMEOUTIFNOTHUNG=0x0008 23} 24} 25 26publicclassIEWindow{ 27publicstaticHTMLDocumentClassGetIEWindowDocument(stringwindowName){ 28UIntPtrlRes=newUIntPtr(); 29IntPtrparentHWnd=Win32API.FindWindow("IEFrame",windowName); 30IntPtreditHWnd=Win32API.FindWindowEx(parentHWnd,IntPtr.Zero,"TabWindowClass",windowName);//需要查找的子窗口的类名,也就是输入框 31IntPtreditHWnd1=Win32API.FindWindowEx(editHWnd,IntPtr.Zero,"ShellDocObjectView","");//需要查找的子窗口的类名,也就是输入框 32IntPtreditHWnd2=Win32API.FindWindowEx(editHWnd1,IntPtr.Zero,"InternetExplorer_Server","");//需要查找的子窗口的类名,也就是输入框 33 34uintapp2_GenerateEvent=Win32API.RegisterWindowMessage("WM_HTML_GETOBJECT"); 35Win32API.SendMessageTimeout(editHWnd2,app2_GenerateEvent,UIntPtr.Zero,IntPtr.Zero,Win32API.SendMessageTimeoutFlags.SMTO_NOTIMEOUTIFNOTHUNG,1000,outlRes); 36 37HTMLDocumentClassobj=(HTMLDocumentClass)Win32API.ObjectFromLresult(lRes,typeof(IHTMLDocument).GUID,IntPtr.Zero); 38returnobj; 39} 40} 41 |