|
web
newsgroups
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
Using AxWebBrowser in VB 2005want to do -- tabbed browsing. It seems I really need RegisterAsBrowser and Application to get each instance of a browser working on each tab (and those methods are not available in 2005). I found some code on MSDN forums, but the extention didn't really cover RegisterAsBrowser. Someone told me how to do it, but it's in c and basically over my head. Even though he later added some VB code (<In> should be changed to <[In]>). I would need definitions for each OLECMD... and I couldn't figure out what to attach the interfaces to... http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=283565&SiteID=1... Sigh. So I figured, okay, this is a LOT OF TROUBLE just to make the "new" browser work like the "old" browser. So I'll just USE the "old" AxWebBrowser in 2005. Solves all my problems, code will work, will have RegisterAsBrowser. (Yes, someone on this group told me the browsers are basically the same just "wrapped" differently.) Dim ThisBrowser as New SHDocVw.AxWebBrowser Only I can't declare a new browser as AxWebBrowser. I get an error of AxWebBrowser ambigious in ShowDocVw namespace. I have references to both Interop.SHDocVw and AxInerop.SHDocVw in my project. But when I go into the form to do an Import, all I get is the SHDocVw namespace with no ability to add on dots and sub namespaces. What am I doing wrong? How can I do the right Imports and namespaces? How can I declare a new instance of an AxWebBrowser? This namespace stuff makes my head swim, actually. I am a fairly good programmer, but some of this VB.Net stuff is too convoluted. Any help appreciated as I stumble around in the dark. Doe > Okay, I've given up on using the "new" WebBrowser in 2005 to do what I I would recommend you try the 2005 WB again. What you're trying to do > want to do -- tabbed browsing. It seems I really need RegisterAsBrowser > and Application to get each instance of a browser working on each tab > (and those methods are not available in 2005). should pretty straight forward: Dim wb As IWebBrowser2 = DirectCast(Me.WebBrowser1.ActiveXInstance, IWebBrowser2) wb.RegisterAsBrowser = True The slightly tricky part would be defining IWebBrowser2... just do a search on http://www.pinvoke.net/ and then just copy and paste. You will need to get the definitions to the following: IWebBrowser2 OLECMDID OLECMDEXCOPT OLECMDF tagREADYSTATE Hopefully this will get you started... my nice little webbrowser inherited
from VS2005's webbrowser to add missing functionality. You need to add a reference to Microsoft Internet Controls COM object. Imports System.Runtime.InteropServices <StructLayout(LayoutKind.Sequential)> _ Friend Structure OLECMDTEXT Public cmdtextf As UInt32 Public cwActual As UInt32 Public cwBuf As UInt32 Public rgwz As Char End Structure <StructLayout(LayoutKind.Sequential)> _ Friend Structure OLECMD Public cmdID As Long Public cmdf As UInt64 End Structure ' Interop definition for IOleCommandTarget. <ComImport(), Guid("b722bccb-4e68-101b-a2bc-00aa00404770"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)> _ Friend Interface IOleCommandTarget ' IMPORTANT: The order of the methods is critical here. We're going to ' perform early binding in most cases, so the order of the methods ' here MUST match the order of their vtable layout (which is determined ' by their layout in IDL). The interop calls key off the vtable ordering, ' not the symbolic names, so if you switched these method declarations ' and attempted to call Exec() on an IOleCommandTarget interface from your ' app, it would translate into a call to QueryStatus() instead. Sub QueryStatus(ByRef pguidCmdGroup As Guid, ByVal cCmds As UInt32, <MarshalAs(UnmanagedType.LPArray, SizeParamIndex:=1)> ByVal prgCmds As OLECMD, ByRef pCmdText As OLECMDTEXT) Sub Exec(ByRef pguidCmdGroup As Guid, ByVal nCmdId As Long, ByVal nCmdExecOpt As Long, ByRef pvaIn As Object, ByRef pvaOut As Object) End Interface ''' <summary> ''' Inherited from .NET 2.0 Webbrowser to provide missing functionality. ''' </summary> ''' <remarks>Even the new .NET 2.0 Webbrowser doesn't implement a full feature set... this class begins to solve that.</remarks> Public Class EnhancedWebBrowser Inherits WebBrowser Private commandGuid As New Guid(&HED016940, -17061, &H11CF, &HBA, &H4E, &H0, &HC0, &H4F, &HD7, &H8, &H16) Private Enum MiscCommandTarget Find = 1 ViewSource = 2 End Enum Private ReadOnly Property UnderlyingBrowser() As SHDocVw.WebBrowser Get Return CType(Me.ActiveXInstance, SHDocVw.WebBrowser) End Get End Property Public Function IsEditCutEnabled() As Boolean Dim result As SHDocVw.OLECMDF = Me.UnderlyingBrowser.QueryStatusWB(SHDocVw.OLECMDID.OLECMDID_CUT) Return ((result And SHDocVw.OLECMDF.OLECMDF_ENABLED) = SHDocVw.OLECMDF.OLECMDF_ENABLED) End Function Public Function IsEditCopyEnabled() As Boolean Dim result As SHDocVw.OLECMDF = Me.UnderlyingBrowser.QueryStatusWB(SHDocVw.OLECMDID.OLECMDID_COPY) Return ((result And SHDocVw.OLECMDF.OLECMDF_ENABLED) = SHDocVw.OLECMDF.OLECMDF_ENABLED) End Function Public Function IsEditPasteEnabled() As Boolean Dim result As SHDocVw.OLECMDF = Me.UnderlyingBrowser.QueryStatusWB(SHDocVw.OLECMDID.OLECMDID_PASTE) Return ((result And SHDocVw.OLECMDF.OLECMDF_ENABLED) = SHDocVw.OLECMDF.OLECMDF_ENABLED) End Function Public Function IsEditUndoEnabled() As Boolean Dim result As SHDocVw.OLECMDF = Me.UnderlyingBrowser.QueryStatusWB(SHDocVw.OLECMDID.OLECMDID_UNDO) Return ((result And SHDocVw.OLECMDF.OLECMDF_ENABLED) = SHDocVw.OLECMDF.OLECMDF_ENABLED) End Function Public Sub ExecEditCut() Me.UnderlyingBrowser.ExecWB(SHDocVw.OLECMDID.OLECMDID_CUT, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER) End Sub Public Sub ExecEditCopy() Me.UnderlyingBrowser.ExecWB(SHDocVw.OLECMDID.OLECMDID_COPY, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER) End Sub Public Sub ExecEditPaste() Me.UnderlyingBrowser.ExecWB(SHDocVw.OLECMDID.OLECMDID_PASTE, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER) End Sub Public Sub ExecEditUndo() Me.UnderlyingBrowser.ExecWB(SHDocVw.OLECMDID.OLECMDID_UNDO, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER) End Sub Private Sub ExecOleCommandTarget(ByVal command As MiscCommandTarget) Dim commandTarget As IOleCommandTarget Dim obj As Object Try commandTarget = CType(Me.Document.DomDocument, IOleCommandTarget) commandTarget.Exec(commandGuid, command, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT, obj, obj) Catch Throw (New Exception(Err.GetException().Message)) End Try End Sub Public Sub ShowFindDialog() ExecOleCommandTarget(MiscCommandTarget.Find) End Sub Public Sub ShowSource() ExecOleCommandTarget(MiscCommandTarget.ViewSource) End Sub End Class Show quoteHide quote "Colin Neller" <cnel***@gmail.com> wrote in message news:OonqjqTSGHA.5108@TK2MSFTNGP09.phx.gbl... >> Okay, I've given up on using the "new" WebBrowser in 2005 to do what I >> want to do -- tabbed browsing. It seems I really need RegisterAsBrowser >> and Application to get each instance of a browser working on each tab >> (and those methods are not available in 2005). > > I would recommend you try the 2005 WB again. What you're trying to do > should pretty straight forward: > > Dim wb As IWebBrowser2 = DirectCast(Me.WebBrowser1.ActiveXInstance, > IWebBrowser2) > wb.RegisterAsBrowser = True > > The slightly tricky part would be defining IWebBrowser2... just do a > search on http://www.pinvoke.net/ and then just copy and paste. You will > need to get the definitions to the following: > > IWebBrowser2 > OLECMDID > OLECMDEXCOPT > OLECMDF > tagREADYSTATE > > -- > Colin Neller > http://www.colinneller.com/blog > Thanks, Colin, I was wondering if a Direct Cast was possible. I have
found code for IWebBrowser2. Thanks, C. Moya. Very nice, but I already have code for stuff like Find and Copy/Paste in both 2003 and 2005. Need the RegisterAsBrowser. And have already found those definitions for OLECMDTEXT and OLECMD. Need the others that Colin mentioned. Thanks for the replies, guys. Going to try Colin's suggest and see if it works. Will report back. A Direct Cast just might do it. Later, Doe You should have looked more closely. From within the inherited "extended"
WebBrowser class I posted... Me.UnderlyingBrowser.RegisterAsBrowser = True The code for "UnderlyingBrowser" is simply: Public ReadOnly Property UnderlyingBrowser() As SHDocVw.WebBrowser Get Return CType(Me.ActiveXInstance, SHDocVw.WebBrowser) End Get End Property Show quoteHide quote "Doe" <doeade***@aol.com> wrote in message news:1142606629.667008.236350@u72g2000cwu.googlegroups.com... > Thanks, Colin, I was wondering if a Direct Cast was possible. I have > found code for IWebBrowser2. > > Thanks, C. Moya. Very nice, but I already have code for stuff like Find > and Copy/Paste in both 2003 and 2005. Need the RegisterAsBrowser. And > have already found those definitions for OLECMDTEXT and OLECMD. Need > the others that Colin mentioned. > > Thanks for the replies, guys. Going to try Colin's suggest and see if > it works. Will report back. A Direct Cast just might do it. > > Later, Doe > Clarification to previous post (read it first):
Actually I made UnderlyingBrowser private to the class... you can easily make it public and expose it or make a new wrapper property for RegisterAsBrowser as so: Public Property RegisterAsBrowser() As Boolean Get Return Me.UnderlyingBrowser.RegisterAsBrowser End Get Set(ByVal value As Boolean) Me.UnderlyingBrowser.RegisterAsBrowser = value End Set End Property Show quoteHide quote "CMM" <cmm@nospam.com> wrote in message news:OFe7TPdSGHA.1948@TK2MSFTNGP09.phx.gbl... > You should have looked more closely. From within the inherited "extended" > WebBrowser class I posted... > > Me.UnderlyingBrowser.RegisterAsBrowser = True > > The code for "UnderlyingBrowser" is simply: > > Public ReadOnly Property UnderlyingBrowser() As SHDocVw.WebBrowser > > Get > Return CType(Me.ActiveXInstance, SHDocVw.WebBrowser) > End Get > > End Property > > > -- > -C. Moya > www.cmoya.com > "Doe" <doeade***@aol.com> wrote in message > news:1142606629.667008.236350@u72g2000cwu.googlegroups.com... >> Thanks, Colin, I was wondering if a Direct Cast was possible. I have >> found code for IWebBrowser2. >> >> Thanks, C. Moya. Very nice, but I already have code for stuff like Find >> and Copy/Paste in both 2003 and 2005. Need the RegisterAsBrowser. And >> have already found those definitions for OLECMDTEXT and OLECMD. Need >> the others that Colin mentioned. >> >> Thanks for the replies, guys. Going to try Colin's suggest and see if >> it works. Will report back. A Direct Cast just might do it. >> >> Later, Doe >> > >
Domain search like setting file permissions
Text on Image Resolution Reading Stream After RedirectStandardOutput=True Blocks Confusion on Protected Overrides time expressions Loop through columns of all datarows in a dataset my form cannot from from network checking for EOF DataGridView validation to underlying DataSource Problems using HasMorePages with oleDbDatareader |
|||||||||||||||||||||||