跪请众朋友帮我找下问题出在哪里?--3

本文介绍了一个名为IEHelper的浏览器插件实现细节。该插件能够读取配置文件中的URL列表,并根据不同类型的URL进行处理。当用户导航到特定URL时,插件会发送消息给指定窗口,用于进一步的数据处理。

// IEHlprObj.cpp : Implementation of CIEHlprObj

#include "stdafx.h"
#include "IEHelper.h"
#include "IEHlprObj.h"
#include "ExDispID.h"
#include <strstrea.h>
#include <stdio.h>
#include "ss_id.h"
#include "MyFunction.h"
#include <vector>
#include <string>
using namespace std;

#define BSC_FILE "DSC_CONFIG.INF"
const char* const pszAppName = "IEHelper";
vector <string> g_urlArr;
vector <string> g_urlSpecArr;
char syspath[MAX_PATH] = {0};
/////////////////////////////////////////////////////////////////////////////
// CIEHlprObj

//
// CIEHlprObj Methods
//

void Spilt(char* spiltString, char* strSeps, int flag)
{
 char *p = new char [strlen(spiltString)+1];
 strcpy(p, spiltString);
 char seps[32];
 strcpy(seps, strSeps);
 char *token;
 token = strtok( p, seps );
 while( token != NULL )
 {
  if(flag==0)
   g_urlArr.push_back(token);
  else
   g_urlSpecArr.push_back(token);

  token = strtok( NULL, seps );
 }
 delete p;
 p = NULL;
}

char* LoadSettingStr(char* strKey, char* defaultData, char* strFile)
{
 char buff[1024];
 ZeroMemory(buff, sizeof(buff));
 GetPrivateProfileString("HEADER", strKey, defaultData, buff, 1024 , strFile);
 return buff;
}

CIEHlprObj::CIEHlprObj()
{
 GetWindowsDirectory(syspath,MAX_PATH);
 strcat(syspath, "//");
 strcat(syspath, BSC_FILE);
 char* str = LoadSettingStr("url", "", syspath);
 Spilt(str, ",", 0);
 str = LoadSettingStr("spec_msg", "", syspath);
 Spilt(str, ",", 1);
}

CIEHlprObj::~CIEHlprObj()
{
 g_urlArr.clear();
}

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<IConnectionPointContainer,
  &IID_IConnectionPointContainer> spCPContainer(m_spWebBrowser2);
 
 if (spCPContainer != NULL)
 {
  CComPtr<IConnectionPoint> 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;
 char *str = NULL;
 if (!pDispParams)
  return E_INVALIDARG;
 //HGLOBAL  simpleData  =  GlobalAlloc(GPTR,512); 
 //LPBYTE  lpSmpData  =  (LPBYTE)GlobalLock(simpleData);
 HWND hwnd = FindWindow("#32770", "URLANDPROCESS");
 //if(hwnd==NULL)
 // return S_OK;
 char buff[256]={0};
 //是否为要拷贝IE中的不需要拷贝的
 bool bSpec = false;
 //
 // Get the current URL
 // 
 LPOLESTR lpURL = NULL;
 m_spWebBrowser2->get_LocationURL(&lpURL);
 int i=0;
 bool bFind = false;
 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_ONQUIT:
  //::MessageBox(0, "ddddd", 0, 0);
  WriteLog("C://bho.doc", "IEELPER的消息------------------");
  SendMessage(hwnd, WM_USER+116, 1, GetCurrentProcessId());
  break;

 case DISPID_BEFORENAVIGATE2:
  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);
  }
        WriteLog("C://bho.doc", str);
 
  for(i=0; i<g_urlSpecArr.size(); i++)
  {
   if(strstr(str, g_urlSpecArr[i].c_str()))
   {
    bSpec = true;
    bFind = false;
    break;
   }
  }
  if(!bSpec)
  {
   for(i=0; i<g_urlArr.size(); i++)
   {
    if(strstr(str, g_urlArr[i].c_str()))
    {
     long id = GetCurrentProcessId();    
     sprintf(buff, "IE_ID %d ", id);
     WriteLog("C://bho.doc", "IEELPER的消息------------------");
     SendMessage(hwnd, WM_USER+104, 0, id);
     bFind = true;
    }
   }
  }
  if(!bFind)
  {
   long id = GetCurrentProcessId();
   sprintf(buff, "IE_ID %d ", id);
   WriteLog("C://bho.doc", "IEELPER的消息------------------");
   if(bSpec)
    SendMessage(hwnd, WM_USER+105, 1, id);
   else
    SendMessage(hwnd, WM_USER+105, 0, id);
  }

  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
  //
  
 default:
  
  break;
 }
 //GlobalUnlock(simpleData); 
 return S_OK;
}

内容概要:本文围绕EKF SLAM(扩展卡尔曼滤波同步定位与地图构建)的性能展开多项对比实验研究,重点分析在稀疏与稠密landmark环境下、预测与更新步骤同时进行与非同时进行的情况下的系统性能差异,并进一步探讨EKF SLAM在有色噪声干扰下的鲁棒性表现。实验考虑了不确定性因素的影响,旨在评估不同条件下算法的定位精度与地图构建质量,为实际应用中EKF SLAM的优化提供依据。文档还提及多智能体系统在遭受DoS攻击下的弹性控制研究,但核心内容聚焦于SLAM算法的性能测试与分析。; 适合人群:具备一定机器人学、状态估计或自动驾驶基础知识的科研人员及工程技术人员,尤其是从事SLAM算法研究或应用开发的硕士、博士研究生和相关领域研发人员。; 使用场景及目标:①用于比较EKF SLAM在不同landmark密度下的性能表现;②分析预测与更新机制同步与否对滤波器稳定性与精度的影响;③评估系统在有色噪声等非理想观测条件下的适应能力,提升实际部署中的可靠性。; 阅读建议:建议结合MATLAB仿真代码进行实验复现,重点关注状态协方差传播、观测更新频率与噪声模型设置等关键环节,深入理解EKF SLAM在复杂环境下的行为特性。稀疏 landmark 与稠密 landmark 下 EKF SLAM 性能对比实验,预测更新同时进行与非同时进行对比 EKF SLAM 性能对比实验,EKF SLAM 在有色噪声下性能实验
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值