最近在一B/S结构的系统中使用了插件来远程操控客户端的一硬件设备。但是考虑到功能使用的安全问题,希望这个插件发布的功能只能在该B/S系统上用,而不允许安装了此插件的客户将其该插件用于其他系统中?我的初步考虑是在插件中获取其宿主,判断其宿主是否是我们的B/S系统,但不知如何在插件里获取其宿主?望同行指点一二或提供其他好的建议。(vc开发)

解决方案 »

  1.   

    自己先顶一下。用GetParent()获取不到相关的父窗口信息。
      

  2.   

    我试过GetModuleFileName(NULL,...),但它只能返回iexplorer.exe的路径,我没有办法确定是不是我的B/S系统。
      

  3.   

    GetModuleFileName确定是不是你的B/S系统。
    GetModuleFileName返回的是路径加名称,需要在程序中取名称
      

  4.   

    这个我早试过,只能取到iexplore.exe的全路径,但不能说所有的iexplore.exe都是我的B/S系统。如果实现了IWebBrowser2就好办了,我就可以取到iexplore链接的是不是我的系统
      

  5.   

    你的插件是什么类型的?BHO?ActiveX?如果是这两种是能取得IWebBrowser2当前加载的URL的。
      

  6.   

    能不能在控件中加入认证信息之类的,认证通过后对设备的操作接口才能使用?另外ls的ls说:插件是什么类型的?BHO?ActiveX?如果是这两种是能取得IWebBrowser2当前加载的URL的。
    想知道怎样可以获取到该IWebBrowser2的指针
      

  7.   

    BHO插件通过SetSite调用就已经获得了IWebBrowser2接口,随时都能访问当前打开的URL;
    ActiveX插件通过查询容器接口能获得自己所属的IHTMLDocument2接口,所以也能获取文档对应的URL
      

  8.   

    不是BHO,是一个普通的activex插件,没有实现IObjectWithSiteImpl<...>,因此如何获取IWebBrowser2应该就可部分解决这个问题
      

  9.   

    IOleObject::GetClientSite --> IOleClientSite
    IOleClientSite::QueryInterface --> IServiceProvider
    IServiceProvider::QueryService --> IHTMLDocument2
      

  10.   

    jameshooo ,能不能麻烦写点具体的代码?我试的时候出现一些问题,可能是我写的不对
      

  11.   

    首先,你的ActiveX组件肯定实现了IOleObject接口,就从这儿开始吧:
    CComPtr<IOleClientSite> spClentSite;
    ((IOleObject*)this)->GetClientSite(&spClientSite);
    CComPtr<IOleContainer> spCont;
    spClientSite->GetContainer(&spCont);
    CComQIPtr<IHTMLDocument2> spDoc = spCont;13楼代码有点问题,不能直接从IServiceProvider直接获得IHTMLDocument2,需要绕点弯,还是这个代码最简单。
      

  12.   

    如果你的组件是用MFC实现的,则直接调用 COleControl::GetClientSite
      

  13.   

    我的插件是MFC的,我试了,这样是有问题的
      

  14.   

    问题已经完美解决。非常感谢jameshooo的引导。