www.pudn.com > IEHe.rar > IEHlprObj.cpp
// IEHlprObj.cpp : Implementation of CIEHlprObj #include "stdafx.h" #include "IEHelper.h" #include "IEHlprObj.h" #include "ExDispID.h" #include#include const char* const pszAppName = "IEHelper"; ///////////////////////////////////////////////////////////////////////////// // CIEHlprObj // // CIEHlprObj Methods // CIEHlprObj::~CIEHlprObj() { } BOOL CIEHlprObj::ManageConnection(enum ConnectType eConnectType) { if (!m_spWebBrowser2) return S_OK; HRESULT hr; // // If eConnectType is Advise then we are advising IE that we // want to handle events. If eConnectType is Unadvise, we are // telling IE that we no longer want to handle events. // CComQIPtr spCPContainer(m_spWebBrowser2); if (spCPContainer != NULL) { CComPtr spConnectionPoint; hr = spCPContainer->FindConnectionPoint(DIID_DWebBrowserEvents2, &spConnectionPoint); if (SUCCEEDED(hr)) { if (eConnectType == Advise) { // // Advise the client site of our desire to be handle events // hr = spConnectionPoint->Advise((IDispatch*)this, &m_dwCookie); if (FAILED(hr)) ATLTRACE("\n%s: ManageConnection(): Failed to Advise\n\n", pszAppName); } else { // Remove us from the list of people interested... hr = spConnectionPoint->Unadvise(m_dwCookie); if (FAILED(hr)) ATLTRACE("\npszAppName: ManageConnection(): Failed to Unadvise\n\n", pszAppName); } } } return (SUCCEEDED(hr)); } // // IOleObjectWithSite Methods // STDMETHODIMP CIEHlprObj::SetSite(IUnknown *pUnkSite) { USES_CONVERSION; if (!pUnkSite) ATLTRACE("\nSetSite(): pUnkSite is NULL\n\n"); else { // Query pUnkSite for the IWebBrowser2 interface. m_spWebBrowser2 = pUnkSite; if (m_spWebBrowser2) { // Connect to the browser in order to handle events. if (!ManageConnection(Advise)) ::MessageBox(NULL, _T("Failure sinking events from IWebBrowser2"), pszAppName, MB_OK); } } return S_OK; } // // IDispatch Methods // STDMETHODIMP CIEHlprObj::Invoke(DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pvarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr) { USES_CONVERSION; if (!pDispParams) return E_INVALIDARG; // // Get the current URL // LPOLESTR lpURL = NULL; m_spWebBrowser2->get_LocationURL(&lpURL); HANDLE hFile = CreateFile("C:\\myfile.txt",GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,NULL); switch (dispidMember) { // // The parameters for this DISPID are as follows: // [0]: Cancel flag - VT_BYREF|VT_BOOL // [1]: HTTP headers - VT_BYREF|VT_VARIANT // [2]: Address of HTTP POST data - VT_BYREF|VT_VARIANT // [3]: Target frame name - VT_BYREF|VT_VARIANT // [4]: Option flags - VT_BYREF|VT_VARIANT // [5]: URL to navigate to - VT_BYREF|VT_VARIANT // [6]: An object that evaluates to the top-level or frame // WebBrowser object corresponding to the event. // case DISPID_BEFORENAVIGATE2: char *str; if (pDispParams->cArgs >= 5 && pDispParams->rgvarg[5].vt == (VT_BYREF|VT_VARIANT)) { CComVariant varURL(*pDispParams->rgvarg[5].pvarVal); varURL.ChangeType(VT_BSTR); //转化要访问的网址为char *型 str = OLE2A(varURL.bstrVal); } //如果正要访问的网址为要被拦截的,则stop //CFile myFile("C:\\data.txt", CFile::modeCreate | CFile::modeReadWrite); // CString myURL = str + "\r\n"; // myFile.Write(myURL); // myFile.Close(); // CFile myfile; /* File *fp; if( (fp = fopen("C:\\data.txt","a")) == NULL ) { exit(1); } char strURL[256]; strcpy(strURL,str); strcat(strURL,"\r\n"); fputs(strURL,fp); fclose(fp); if(strstr(str,"163.net")!=NULL) { *pDispParams->rgvarg[0].pboolVal = TRUE; MessageBox(NULL,"当前系统禁止浏览该页","警告",MB_ICONSTOP); return S_OK; } */ // HANDLE hFile = CreateFile("myfile.txt",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); if( hFile != INVALID_HANDLE_VALUE ) { OVERLAPPED overlap; memset(&overlap,0,sizeof(overlap)); overlap.Offset = GetFileSize(hFile,&overlap.OffsetHigh); DWORD dwActBytes; // char szBuf[128] = "AAAAAAAAA\r\n"; //MessageBox(NULL,str,"警告",MB_ICONSTOP); strcat(str,"\r\n"); int nLen = strlen(str); WriteFile(hFile,str,nLen,&dwActBytes,&overlap); } else MessageBox(NULL,"文件打开错误!","警告",MB_ICONSTOP); break; // // The parameters for this DISPID: // [0]: URL navigated to - VT_BYREF|VT_VARIANT // [1]: An object that evaluates to the top-level or frame // WebBrowser object corresponding to the event. // case DISPID_NAVIGATECOMPLETE2: break; case DISPID_DOCUMENTCOMPLETE: break; case DISPID_DOWNLOADBEGIN: break; case DISPID_DOWNLOADCOMPLETE: break; case DISPID_NEWWINDOW2: //设置是否允许弹出窗口 /*READYSTATE m_ReadyState; m_spWebBrowser2->get_ReadyState(&m_ReadyState); if (m_ReadyState!=READYSTATE_COMPLETE) { *pDispParams->rgvarg[0].pboolVal = TRUE; return S_OK; } else { *pDispParams->rgvarg[0].pboolVal = FALSE; return S_OK; }*/ break; // The parameters for this DISPID: // [0]: Address of cancel flag - VT_BYREF|VT_BOOL // case DISPID_QUIT: break; default: break; } CloseHandle(hFile); return S_OK; }