您的位置:首页 > 其它

axWebBrowser拦截网页Alter消息

2011-01-30 16:06 417 查看
Enums.cs

namespace WindowsFormsApplication1
{
public enum tagOLECONTF
{
OLECONTF_EMBEDDINGS = 1,
OLECONTF_LINKS = 2,
OLECONTF_OTHERS = 4,
OLECONTF_ONLYUSER = 8,
OLECONTF_ONLYIFRUNNING = 16
}
}


GeneralClasses.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WindowsFormsApplication1
{
public sealed class Hresults
{
public const int NOERROR = 0;
public const int S_OK = 0;
public const int S_FALSE = 1;
public const int E_PENDING = unchecked((int)0x8000000A);
public const int E_HANDLE = unchecked((int)0x80070006);
public const int E_NOTIMPL = unchecked((int)0x80004001);
public const int E_NOINTERFACE = unchecked((int)0x80004002);
//ArgumentNullException. NullReferenceException uses COR_E_NULLREFERENCE
public const int E_POINTER = unchecked((int)0x80004003);
public const int E_ABORT = unchecked((int)0x80004004);
public const int E_FAIL = unchecked((int)0x80004005);
public const int E_OUTOFMEMORY = unchecked((int)0x8007000E);
public const int E_ACCESSDENIED = unchecked((int)0x80070005);
public const int E_UNEXPECTED = unchecked((int)0x8000FFFF);
public const int E_FLAGS = unchecked((int)0x1000);
public const int E_INVALIDARG = unchecked((int)0x80070057);

//Wininet
public const int ERROR_SUCCESS = 0;
public const int ERROR_FILE_NOT_FOUND = 2;
public const int ERROR_ACCESS_DENIED = 5;
public const int ERROR_INSUFFICIENT_BUFFER = 122;
public const int ERROR_NO_MORE_ITEMS = 259;

//Ole Errors
public const int OLE_E_FIRST = unchecked((int)0x80040000);
public const int OLE_E_LAST = unchecked((int)0x800400FF);
public const int OLE_S_FIRST = unchecked((int)0x00040000);
public const int OLE_S_LAST = unchecked((int)0x000400FF);
//OLECMDERR_E_FIRST = 0x80040100
public const int OLECMDERR_E_FIRST = unchecked((int)(OLE_E_LAST + 1));
public const int OLECMDERR_E_NOTSUPPORTED = unchecked((int)(OLECMDERR_E_FIRST));
public const int OLECMDERR_E_DISABLED = unchecked((int)(OLECMDERR_E_FIRST + 1));
public const int OLECMDERR_E_NOHELP = unchecked((int)(OLECMDERR_E_FIRST + 2));
public const int OLECMDERR_E_CANCELED = unchecked((int)(OLECMDERR_E_FIRST + 3));
public const int OLECMDERR_E_UNKNOWNGROUP = unchecked((int)(OLECMDERR_E_FIRST + 4));

public const int OLEOBJ_E_NOVERBS = unchecked((int)0x80040180);
public const int OLEOBJ_S_INVALIDVERB = unchecked((int)0x00040180);
public const int OLEOBJ_S_CANNOT_DOVERB_NOW = unchecked((int)0x00040181);
public const int OLEOBJ_S_INVALIDHWND = unchecked((int)0x00040182);

public const int DV_E_LINDEX = unchecked((int)0x80040068);
public const int OLE_E_OLEVERB = unchecked((int)0x80040000);
public const int OLE_E_ADVF = unchecked((int)0x80040001);
public const int OLE_E_ENUM_NOMORE = unchecked((int)0x80040002);
public const int OLE_E_ADVISENOTSUPPORTED = unchecked((int)0x80040003);
public const int OLE_E_NOCONNECTION = unchecked((int)0x80040004);
public const int OLE_E_NOTRUNNING = unchecked((int)0x80040005);
public const int OLE_E_NOCACHE = unchecked((int)0x80040006);
public const int OLE_E_BLANK = unchecked((int)0x80040007);
public const int OLE_E_CLASSDIFF = unchecked((int)0x80040008);
public const int OLE_E_CANT_GETMONIKER = unchecked((int)0x80040009);
public const int OLE_E_CANT_BINDTOSOURCE = unchecked((int)0x8004000A);
public const int OLE_E_STATIC = unchecked((int)0x8004000B);
public const int OLE_E_PROMPTSAVECANCELLED = unchecked((int)0x8004000C);
public const int OLE_E_INVALIDRECT = unchecked((int)0x8004000D);
public const int OLE_E_WRONGCOMPOBJ = unchecked((int)0x8004000E);
public const int OLE_E_INVALIDHWND = unchecked((int)0x8004000F);
public const int OLE_E_NOT_INPLACEACTIVE = unchecked((int)0x80040010);
public const int OLE_E_CANTCONVERT = unchecked((int)0x80040011);
public const int OLE_E_NOSTORAGE = unchecked((int)0x80040012);
public const int RPC_E_RETRY = unchecked((int)0x80010109);
}
}


OleInterfaces.cs

using System;
using System.IO;
using System.ComponentModel;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;
using System.Security;
using System.Collections;
using System.Text;
using mshtml;

namespace WindowsFormsApplication1
{
#region IDocHostShowUI Interface
//MIDL_INTERFACE("c4d244b0-d43e-11cf-893b-00aa00bdce1a")
//IDocHostShowUI : public IUnknown
//{
//public:
//    virtual HRESULT STDMETHODCALLTYPE ShowMessage(
//        /* [in] */ HWND hwnd,
//        /* [in] */ LPOLESTR lpstrText,
//        /* [in] */ LPOLESTR lpstrCaption,
//        /* [in] */ DWORD dwType,
//        /* [in] */ LPOLESTR lpstrHelpFile,
//        /* [in] */ DWORD dwHelpContext,
//        /* [out] */ LRESULT *plResult) = 0;

//    virtual HRESULT STDMETHODCALLTYPE ShowHelp(
//        /* [in] */ HWND hwnd,
//        /* [in] */ LPOLESTR pszHelpFile,
//        /* [in] */ UINT uCommand,
//        /* [in] */ DWORD dwData,
//        /* [in] */ POINT ptMouse,
//        /* [out] */ IDispatch *pDispatchObjectHit) = 0;

//};
[ComImport, ComVisible(true)]
[Guid("C4D244B0-D43E-11CF-893B-00AA00BDCE1A")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IDocHostShowUI
{
[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int ShowMessage(
IntPtr hwnd,
[MarshalAs(UnmanagedType.LPWStr)] string lpstrText,
[MarshalAs(UnmanagedType.LPWStr)] string lpstrCaption,
[MarshalAs(UnmanagedType.U4)] uint dwType,
[MarshalAs(UnmanagedType.LPWStr)] string lpstrHelpFile,
[MarshalAs(UnmanagedType.U4)] uint dwHelpContext,
[In, Out] ref int lpResult);

[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int ShowHelp(
IntPtr hwnd,
[MarshalAs(UnmanagedType.LPWStr)] string pszHelpFile,
[MarshalAs(UnmanagedType.U4)] uint uCommand,
[MarshalAs(UnmanagedType.U4)] uint dwData,
[In, MarshalAs(UnmanagedType.Struct)] tagPOINT ptMouse,
[Out, MarshalAs(UnmanagedType.IDispatch)] object pDispatchObjectHit);
}
#endregion

#region IOleClientSite Interface
//MIDL_INTERFACE("00000118-0000-0000-C000-000000000046")
//IOleClientSite : public IUnknown
//{
//public:
//    virtual HRESULT STDMETHODCALLTYPE SaveObject( void) = 0;

//    virtual HRESULT STDMETHODCALLTYPE GetMoniker(
//        /* [in] */ DWORD dwAssign,
//        /* [in] */ DWORD dwWhichMoniker,
//        /* [out] */ IMoniker **ppmk) = 0;

//    virtual HRESULT STDMETHODCALLTYPE GetContainer(
//        /* [out] */ IOleContainer **ppContainer) = 0;

//    virtual HRESULT STDMETHODCALLTYPE ShowObject( void) = 0;

//    virtual HRESULT STDMETHODCALLTYPE OnShowWindow(
//        /* [in] */ BOOL fShow) = 0;

//    virtual HRESULT STDMETHODCALLTYPE RequestNewObjectLayout( void) = 0;

//};
[ComImport, ComVisible(true)]
[Guid("00000118-0000-0000-C000-000000000046")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IOleClientSite
{
[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int SaveObject();

[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int GetMoniker(
[In, MarshalAs(UnmanagedType.U4)]         uint dwAssign,
[In, MarshalAs(UnmanagedType.U4)]         uint dwWhichMoniker,
[Out, MarshalAs(UnmanagedType.Interface)] out System.Runtime.InteropServices.ComTypes.IMoniker ppmk);

[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int GetContainer(
[Out, MarshalAs(UnmanagedType.Interface)] out IOleContainer ppContainer);

[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int ShowObject();

[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int OnShowWindow([In, MarshalAs(UnmanagedType.Bool)] bool fShow);

[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int RequestNewObjectLayout();
}
#endregion

#region IOleContainer Interface
//MIDL_INTERFACE("0000011b-0000-0000-C000-000000000046")
//IOleContainer : public IParseDisplayName
//{
//public:
//    virtual HRESULT STDMETHODCALLTYPE EnumObjects(
//        /* [in] */ DWORD grfFlags,
//        /* [out] */ IEnumUnknown **ppenum) = 0;

//    virtual HRESULT STDMETHODCALLTYPE LockContainer(
//        /* [in] */ BOOL fLock) = 0;

//};
[ComImport(), ComVisible(true),
Guid("0000011B-0000-0000-C000-000000000046"),
InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
public interface IOleContainer
{
//IParseDisplayName
[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int ParseDisplayName(
[In, MarshalAs(UnmanagedType.Interface)] object pbc,
[In, MarshalAs(UnmanagedType.BStr)]      string pszDisplayName,
[Out, MarshalAs(UnmanagedType.LPArray)] int[] pchEaten,
[Out, MarshalAs(UnmanagedType.LPArray)] object[] ppmkOut);

//IOleContainer
[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int EnumObjects(
[In, MarshalAs(UnmanagedType.U4)] tagOLECONTF grfFlags,
out IEnumUnknown ppenum);

[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int LockContainer(
[In, MarshalAs(UnmanagedType.Bool)] Boolean fLock);
}
#endregion

#region IOleObject Interface
//MIDL_INTERFACE("00000112-0000-0000-C000-000000000046")
//IOleObject : public IUnknown
//{
//public:
//    virtual HRESULT STDMETHODCALLTYPE SetClientSite(
//        /* [unique][in] */ IOleClientSite *pClientSite) = 0;

//    virtual HRESULT STDMETHODCALLTYPE GetClientSite(
//        /* [out] */ IOleClientSite **ppClientSite) = 0;

//    virtual HRESULT STDMETHODCALLTYPE SetHostNames(
//        /* [in] */ LPCOLESTR szContainerApp,
//        /* [unique][in] */ LPCOLESTR szContainerObj) = 0;

//    virtual HRESULT STDMETHODCALLTYPE Close(
//        /* [in] */ DWORD dwSaveOption) = 0;

//    virtual HRESULT STDMETHODCALLTYPE SetMoniker(
//        /* [in] */ DWORD dwWhichMoniker,
//        /* [unique][in] */ IMoniker *pmk) = 0;

//    virtual HRESULT STDMETHODCALLTYPE GetMoniker(
//        /* [in] */ DWORD dwAssign,
//        /* [in] */ DWORD dwWhichMoniker,
//        /* [out] */ IMoniker **ppmk) = 0;

//    virtual HRESULT STDMETHODCALLTYPE InitFromData(
//        /* [unique][in] */ IDataObject *pDataObject,
//        /* [in] */ BOOL fCreation,
//        /* [in] */ DWORD dwReserved) = 0;

//    virtual HRESULT STDMETHODCALLTYPE GetClipboardData(
//        /* [in] */ DWORD dwReserved,
//        /* [out] */ IDataObject **ppDataObject) = 0;

//    virtual HRESULT STDMETHODCALLTYPE DoVerb(
//        /* [in] */ LONG iVerb,
//        /* [unique][in] */ LPMSG lpmsg,
//        /* [unique][in] */ IOleClientSite *pActiveSite,
//        /* [in] */ LONG lindex,
//        /* [in] */ HWND hwndParent,
//        /* [unique][in] */ LPCRECT lprcPosRect) = 0;

//    virtual HRESULT STDMETHODCALLTYPE EnumVerbs(
//        /* [out] */ IEnumOLEVERB **ppEnumOleVerb) = 0;

//    virtual HRESULT STDMETHODCALLTYPE Update( void) = 0;

//    virtual HRESULT STDMETHODCALLTYPE IsUpToDate( void) = 0;

//    virtual HRESULT STDMETHODCALLTYPE GetUserClassID(
//        /* [out] */ CLSID *pClsid) = 0;

//    virtual HRESULT STDMETHODCALLTYPE GetUserType(
//        /* [in] */ DWORD dwFormOfType,
//        /* [out] */ LPOLESTR *pszUserType) = 0;

//    virtual HRESULT STDMETHODCALLTYPE SetExtent(
//        /* [in] */ DWORD dwDrawAspect,
//        /* [in] */ SIZEL *psizel) = 0;

//    virtual HRESULT STDMETHODCALLTYPE GetExtent(
//        /* [in] */ DWORD dwDrawAspect,
//        /* [out] */ SIZEL *psizel) = 0;

//    virtual HRESULT STDMETHODCALLTYPE Advise(
//        /* [unique][in] */ IAdviseSink *pAdvSink,
//        /* [out] */ DWORD *pdwConnection) = 0;

//    virtual HRESULT STDMETHODCALLTYPE Unadvise(
//        /* [in] */ DWORD dwConnection) = 0;

//    virtual HRESULT STDMETHODCALLTYPE EnumAdvise(
//        /* [out] */ IEnumSTATDATA **ppenumAdvise) = 0;

//    virtual HRESULT STDMETHODCALLTYPE GetMiscStatus(
//        /* [in] */ DWORD dwAspect,
//        /* [out] */ DWORD *pdwStatus) = 0;

//    virtual HRESULT STDMETHODCALLTYPE SetColorScheme(
//        /* [in] */ LOGPALETTE *pLogpal) = 0;
//};
[ComImport, ComVisible(true)]
[Guid("00000112-0000-0000-C000-000000000046")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IOleObject
{
[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int SetClientSite(
[In, MarshalAs(UnmanagedType.Interface)] IOleClientSite pClientSite);

[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int GetClientSite(
[Out, MarshalAs(UnmanagedType.Interface)] out IOleClientSite site);

[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int SetHostNames(
[In, MarshalAs(UnmanagedType.LPWStr)] string szContainerApp,
[In, MarshalAs(UnmanagedType.LPWStr)] string szContainerObj);

[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int Close([In, MarshalAs(UnmanagedType.U4)] uint dwSaveOption);

[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int SetMoniker(
[In, MarshalAs(UnmanagedType.U4)] int dwWhichMoniker,
[In, MarshalAs(UnmanagedType.Interface)] System.Runtime.InteropServices.ComTypes.IMoniker pmk);

[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int GetMoniker(
[In, MarshalAs(UnmanagedType.U4)] uint dwAssign,
[In, MarshalAs(UnmanagedType.U4)] uint dwWhichMoniker,
[Out, MarshalAs(UnmanagedType.Interface)] out System.Runtime.InteropServices.ComTypes.IMoniker moniker);

[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int InitFromData(
[In, MarshalAs(UnmanagedType.Interface)] System.Runtime.InteropServices.ComTypes.IDataObject pDataObject,
[In, MarshalAs(UnmanagedType.Bool)] bool fCreation,
[In, MarshalAs(UnmanagedType.U4)] uint dwReserved);

int GetClipboardData(
[In, MarshalAs(UnmanagedType.U4)] uint dwReserved,
[Out, MarshalAs(UnmanagedType.Interface)] out System.Runtime.InteropServices.ComTypes.IDataObject data);

[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int DoVerb(
[In, MarshalAs(UnmanagedType.I4)] int iVerb,
[In, MarshalAs(UnmanagedType.Struct)] ref tagMSG lpmsg,
//or [In] IntPtr lpmsg,
[In, MarshalAs(UnmanagedType.Interface)] IOleClientSite pActiveSite,
[In, MarshalAs(UnmanagedType.I4)] int lindex,
[In] IntPtr hwndParent,
[In, MarshalAs(UnmanagedType.Struct)] ref tagRECT lprcPosRect);

[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int EnumVerbs([Out, MarshalAs(UnmanagedType.Interface)] out Object e);
//int EnumVerbs(out IEnumOLEVERB e);

[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int OleUpdate();

[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int IsUpToDate();

[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int GetUserClassID([In, Out] ref Guid pClsid);

[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int GetUserType(
[In, MarshalAs(UnmanagedType.U4)] uint dwFormOfType,
[Out, MarshalAs(UnmanagedType.LPWStr)] out string userType);

[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int SetExtent(
[In, MarshalAs(UnmanagedType.U4)] uint dwDrawAspect,
[In, MarshalAs(UnmanagedType.Struct)] ref tagSIZEL pSizel);

[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int GetExtent(
[In, MarshalAs(UnmanagedType.U4)] uint dwDrawAspect,
[In, Out, MarshalAs(UnmanagedType.Struct)] ref tagSIZEL pSizel);

[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int Advise(
[In, MarshalAs(UnmanagedType.Interface)] System.Runtime.InteropServices.ComTypes.IAdviseSink pAdvSink,
out int cookie);

[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int Unadvise(
[In, MarshalAs(UnmanagedType.U4)] uint dwConnection);

[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int EnumAdvise(out System.Runtime.InteropServices.ComTypes.IEnumSTATDATA e);

[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int GetMiscStatus(
[In, MarshalAs(UnmanagedType.U4)] uint dwAspect,
out int misc);

[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int SetColorScheme([In, MarshalAs(UnmanagedType.Struct)] ref object pLogpal);
}
#endregion
}


Structs.cs

using System;
using System.Text;
using System.Runtime.InteropServices;

namespace WindowsFormsApplication1
{
[ComVisible(true), StructLayout(LayoutKind.Sequential)]
public struct tagSIZEL
{
[MarshalAs(UnmanagedType.I4)]
public int cx;
[MarshalAs(UnmanagedType.I4)]
public int cy;
}

[ComVisible(true), StructLayout(LayoutKind.Sequential)]
public struct tagMSG
{
public IntPtr hwnd;
[MarshalAs(UnmanagedType.I4)]
public int message;
public IntPtr wParam;
public IntPtr lParam;
[MarshalAs(UnmanagedType.I4)]
public int time;
// pt was a by-value POINT structure
[MarshalAs(UnmanagedType.I4)]
public int pt_x;
[MarshalAs(UnmanagedType.I4)]
public int pt_y;
//public tagPOINT pt;
}
}


Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using mshtml;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form, IDocHostShowUI, IOleClientSite
{
#region IDocHostShowUI Members
//Can not catch VBScript MsgBox and InputBox functions and javascript prompt
//This does catch alert and confirm (VBScript as well)
int IDocHostShowUI.ShowMessage(IntPtr hwnd, string lpstrText,
string lpstrCaption, uint dwType,
string lpstrHelpFile, uint dwHelpContext, ref int lpResult)
{
//Initially
//lpResult is set 0 //S_OK
//Host did not display its UI. MSHTML displays its message box.
int iRet = Hresults.S_OK;
/*
//raise event?
if (WBDocHostShowUIShowMessage != null)
{
//Refer to http://msdn2.microsoft.com/en-us/library/ms645505.aspx //for possible values of dwType
DocHostShowUIShowMessageEvent.SetParameters(hwnd, lpstrText, lpstrCaption, dwType, lpstrHelpFile, dwHelpContext, lpResult);
WBDocHostShowUIShowMessage(this, DocHostShowUIShowMessageEvent);
if (DocHostShowUIShowMessageEvent.handled)
{
//Host displayed its user interface (UI). MSHTML does not display its message box.
iRet = Hresults.S_OK;
lpResult = DocHostShowUIShowMessageEvent.result;
}
DocHostShowUIShowMessageEvent.Reset();
}*/
////uncomment to use
//else
//{
//  lpResult = (int)WinApis.MessageBox(hwnd, lpstrText, lpstrCaption, dwType);
//  iRet = Hresults.S_OK;
//}
return iRet;
}

int IDocHostShowUI.ShowHelp(IntPtr hwnd, string pszHelpFile, uint uCommand, uint dwData, tagPOINT ptMouse, object pDispatchObjectHit)
{
return Hresults.E_NOTIMPL;
}

#endregion

#region IOleClientSite Members

int IOleClientSite.SaveObject()
{
return Hresults.E_NOTIMPL;
//throw new Exception("The method or operation is not implemented.");
}

int IOleClientSite.GetMoniker(uint dwAssign, uint dwWhichMoniker, out System.Runtime.InteropServices.ComTypes.IMoniker ppmk)
{
ppmk = null;
return Hresults.E_NOTIMPL;
}

int IOleClientSite.GetContainer(out IOleContainer ppContainer)
{
ppContainer = null;
return Hresults.E_NOTIMPL;
}

int IOleClientSite.ShowObject()
{
return Hresults.S_OK;
}

int IOleClientSite.OnShowWindow(bool fShow)
{
return Hresults.E_NOTIMPL;
}

int IOleClientSite.RequestNewObjectLayout()
{
return Hresults.E_NOTIMPL;
}

#endregion

public Form1()
{
InitializeComponent();

object obj = axWebBrowser1.GetOcx();
IOleObject oc = obj as IOleObject;
oc.SetClientSite(this);
}

private void Form1_Load(object sender, EventArgs e)
{
axWebBrowser1.Navigate("c://index2.htm");
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: