他们是 ole拖放技术,并不是能找到超连接

解决方案 »

  1.   

    分析页面文件,如找到<a href ... >XXX</a>之类的特征串就把其中的URL地址分离出来,这需要一定的HTML知识,不过不是很难。我记得有一个控件是专门分析HTML页面的,忘了叫什么了:)
    不过如果你只是想找超链接,自己写一个应该不难。
      

  2.   

    WebBrowser控件即可。
    用WebBrowser装入或访问该页面,
    然后取得属性Document,就可以访问Anchors获得该页面所有的超链接了。
      

  3.   

    Muf(沐枫):
      大侠高见。
      只是我觉得WebBrowser好象太占资源了,不知是不是这样。
      

  4.   

    To: runbuff(玩火人)
    如果你的页面已经在IE中了,那大可不必重新建一个WebBrowser控件,直接访问那个IE中的HTMLDocument就可以了。
      

  5.   

    Muf(沐枫):
      谢谢。
      我是想做一个类似于“网站打包下载”之类的东西,页面并非在IE中,而是作为一个文本文件或一个长字符串,想从中找出所有链接,有没有比WebBrowser更好的方法呢?
      

  6.   

    To: runbuff(玩火人)
      当然有。
      超链接的语法比较简单。因此,使用正则表达式查找是很有效的。
      只要你构造出合适的表达式,就可以很容易把它们都找出来。
      

  7.   

    这个程序可以帮你。
    #include <stdio.h>
    #include <afx.h>
    #include <afxwin.h>
    #include <afxinet.h>#include <iostream.h>
    #include <stdlib.h>// 进行大小写无关的查找,找到返回起始位置,否则返回-1
    int CaseIgnoreStrStr(char *srcstr, char *substr)
    {
    char *buffer, *p, *substrupper; buffer = _strupr(_strdup(srcstr));
    substrupper = _strupr(_strdup(substr)); p = strstr(buffer, substrupper);
    if (p==NULL)
    return -1;
    else
    return p - buffer;
    }
    // parse the url from one line of the homepage
    int ParseUrlFrom(char *line, char *url)
    {
    char *p1, *p2;
    char tmp[1024];
    int i = 0, index = 0;
    memset(tmp, 0, sizeof(tmp)); p1 = NULL;
    p2 = NULL;
    index = CaseIgnoreStrStr(line, "HREF");
    if (index==-1)
    return -1; p1 = line + index;
    p1 = p1 + 4; // go over the 'href'
    index = CaseIgnoreStrStr(p1, "HTTP://");
    if (index==-1)  // stile pages on this server
    return -1;
    else  // point to a new web site
    {
    p2 = p1 + index;
    while ((*p2!='"')&&(*p2!=' ')&&(*p2!='>')&&(*p2!=0x0a)
    &&(*p2!=0x0d)&&(*p2!=0)&&(*p2!='#')&&(*p2!='\''))
    {
    *url = *p2;
    url ++;
    p2 ++;
    }
    } return 0;
    }int main(int argc , char *argv[])
    {
    FILE *f;
    char buffer[1024], url[1024]; f = fopen(argv[1], "r");
    if (f==NULL)
    return -1; fgets(buffer, sizeof(buffer), f);
    while(!feof(f))
    {
    memset(url, 0, sizeof(url));
    if (ParseUrlFrom(buffer, url)==0)
    printf("%s\n", url);
    fgets(buffer, sizeof(buffer), f);
    } fclose(f);
    return 0;
    }
      

  8.   

    search this article in MSDN:
    Shell Support for Dynamic HTML
      

  9.   

    http://www.csdn.net/expert/topic/699/699563.xml?temp=.2848322
      

  10.   

    ///////////////////////////////////////////////////////////////////////////////////////
    //change_anchor_href
    ///////////////////////////////////////////////////////////////////////////////////////
    void change_anchor_href()
    {
    //CComQIPtr<IWebBrowser2> m_spBrowser;
    HRESULT hr;
    if (m_spBrowser != NULL)
    {
    IDispatchPtr spDisp=NULL;
    hr=m_spBrowser->get_Document(&spDisp);
    if(SUCCEEDED(hr)&& spDisp!= NULL )
    {
    IHTMLDocument2Ptr spHtmlDocument(spDisp);
    IHTMLElementPtr spHtmlElement;
    spHtmlDocument->get_body(&spHtmlElement);
    IHTMLElementCollection* pColl=NULL;
    hr=spHtmlDocument->get_all(&pColl);
    if(pColl!=NULL&&SUCCEEDED(hr))
    {
    IHTMLElement* pElem=NULL;
    _variant_t index;
    index.vt=VT_I4;
    IDispatchPtr disp;
    long num;
    hr=pColl->get_length(&num);
    if(SUCCEEDED(hr))
    {
    for(long i=0;i<num;i++)
    {
    index.intVal=i;
    hr=pColl->item(index,index,&disp);
    IHTMLAnchorElementPtr pAnchorElement;
    if(SUCCEEDED(hr)&&disp!=NULL)
    {
    hr=disp->QueryInterface(&pAnchorElement);
    }
    if (SUCCEEDED(hr)&& pAnchorElement != NULL)
    {
    pAnchorElement->put_href(_bstr_t("c:\\tmp\\link.htm"));
    } }
    }
    pColl->Release();
    }
    }
    }
    }