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(L ayoutKind.Seque ntial)> _
Friend Structure OLECMDTEXT
Public cmdtextf As UInt32
Public cwActual As UInt32
Public cwBuf As UInt32
Public rgwz As Char
End Structure
<StructLayout(L ayoutKind.Seque ntial)> _
Friend Structure OLECMD
Public cmdID As Long
Public cmdf As UInt64
End Structure
' Interop definition for IOleCommandTarg et.
<ComImport(), Guid("b722bccb-4e68-101b-a2bc-00aa00404770"),
InterfaceType(C omInterfaceType .InterfaceIsIUn known)> _
Friend Interface IOleCommandTarg et
' 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 IOleCommandTarg et interface from
your
' app, it would translate into a call to QueryStatus() instead.
Sub QueryStatus(ByR ef pguidCmdGroup As Guid, ByVal cCmds As UInt32,
<MarshalAs(Unma nagedType.LPArr ay, 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 EnhancedWebBrow ser
Inherits WebBrowser
Private commandGuid As New Guid(&HED016940 , -17061, &H11CF, &HBA, &H4E,
&H0, &HC0, &H4F, &HD7, &H8, &H16)
Private Enum MiscCommandTarg et
Find = 1
ViewSource = 2
End Enum
Private ReadOnly Property UnderlyingBrows er() As SHDocVw.WebBrow ser
Get
Return CType(Me.Active XInstance, SHDocVw.WebBrow ser)
End Get
End Property
Public Function IsEditCutEnable d() As Boolean
Dim result As SHDocVw.OLECMDF =
Me.UnderlyingBr owser.QueryStat usWB(SHDocVw.OL ECMDID.OLECMDID _CUT)
Return ((result And SHDocVw.OLECMDF .OLECMDF_ENABLE D) =
SHDocVw.OLECMDF .OLECMDF_ENABLE D)
End Function
Public Function IsEditCopyEnabl ed() As Boolean
Dim result As SHDocVw.OLECMDF =
Me.UnderlyingBr owser.QueryStat usWB(SHDocVw.OL ECMDID.OLECMDID _COPY)
Return ((result And SHDocVw.OLECMDF .OLECMDF_ENABLE D) =
SHDocVw.OLECMDF .OLECMDF_ENABLE D)
End Function
Public Function IsEditPasteEnab led() As Boolean
Dim result As SHDocVw.OLECMDF =
Me.UnderlyingBr owser.QueryStat usWB(SHDocVw.OL ECMDID.OLECMDID _PASTE)
Return ((result And SHDocVw.OLECMDF .OLECMDF_ENABLE D) =
SHDocVw.OLECMDF .OLECMDF_ENABLE D)
End Function
Public Function IsEditUndoEnabl ed() As Boolean
Dim result As SHDocVw.OLECMDF =
Me.UnderlyingBr owser.QueryStat usWB(SHDocVw.OL ECMDID.OLECMDID _UNDO)
Return ((result And SHDocVw.OLECMDF .OLECMDF_ENABLE D) =
SHDocVw.OLECMDF .OLECMDF_ENABLE D)
End Function
Public Sub ExecEditCut()
Me.UnderlyingBr owser.ExecWB(SH DocVw.OLECMDID. OLECMDID_CUT,
SHDocVw.OLECMDE XECOPT.OLECMDEX ECOPT_DONTPROMP TUSER)
End Sub
Public Sub ExecEditCopy()
Me.UnderlyingBr owser.ExecWB(SH DocVw.OLECMDID. OLECMDID_COPY,
SHDocVw.OLECMDE XECOPT.OLECMDEX ECOPT_DONTPROMP TUSER)
End Sub
Public Sub ExecEditPaste()
Me.UnderlyingBr owser.ExecWB(SH DocVw.OLECMDID. OLECMDID_PASTE,
SHDocVw.OLECMDE XECOPT.OLECMDEX ECOPT_DONTPROMP TUSER)
End Sub
Public Sub ExecEditUndo()
Me.UnderlyingBr owser.ExecWB(SH DocVw.OLECMDID. OLECMDID_UNDO,
SHDocVw.OLECMDE XECOPT.OLECMDEX ECOPT_DONTPROMP TUSER)
End Sub
Private Sub ExecOleCommandT arget(ByVal command As MiscCommandTarg et)
Dim commandTarget As IOleCommandTarg et
Dim obj As Object
Try
commandTarget = CType(Me.Docume nt.DomDocument,
IOleCommandTarg et)
commandTarget.E xec(commandGuid , command,
SHDocVw.OLECMDE XECOPT.OLECMDEX ECOPT_DODEFAULT , obj, obj)
Catch
Throw (New Exception(Err.G etException().M essage))
End Try
End Sub
Public Sub ShowFindDialog( )
ExecOleCommandT arget(MiscComma ndTarget.Find)
End Sub
Public Sub ShowSource()
ExecOleCommandT arget(MiscComma ndTarget.ViewSo urce)
End Sub
End Class
--
-C. Moya
www.cmoya.com
"Colin Neller" <cn*****@gmail. com> wrote in message
news:Oo******** ******@TK2MSFTN GP09.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 RegisterAsBrows er
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.W ebBrowser1.Acti veXInstance,
IWebBrowser2)
wb.RegisterAsBr owser = 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