你能找到这些窗口的句柄么?我用Spy++,不能发现它们的句柄

解决方案 »

  1.   

    why not use bho(Browser Helper Objects)?
      

  2.   

    我写了一个类似的东西,通过得到IE窗口句柄,然后把窗口至于最前端,最后模拟键盘。
    HWND hWnd=::FindWindow("IEFrame",NULL);
    ::SetForegroundWindow(hWnd);
    ::SetActiveWindow(hWnd);
    ::SetFocus(hWnd);
    CopyString("110");
    CopyString("284");
    for(int i=0;i<9;i++)
    {
    CString strTmp;
    strTmp.Format("%d",111+i);
    CopyString(strTmp);
    keybd_event( VK_TAB, 0, 0, 0 );
    keybd_event( VK_TAB, 0, KEYEVENTF_KEYUP, 0);
    }
      

  3.   

    我做过实验,IE窗口开的控件窗口没有句柄;我还在书上看到过好象使用COM才能较好地处理这种问题,请方家指正。
    如果用键盘模拟方式,焦点如何处理(有多个控件文本窗口、雷达钮等)?
    大家可以设想为一个聊天室写个自动聊天程序,功能是每隔一段时间发言。但是这个聊天室在每次发言后,自动失去焦点,光标不在文本窗。
      

  4.   

    要利用“对象组件库”技术中的Document-->Forms-->Elements
      

  5.   

    SendMessage(hwnd,WM_SETTEXT,wparam,lparam); 应该可以
      

  6.   

    我写了一个小程序,用来看小说的(支持网页和记事本),能定时向它们发送翻页的消息(长期看小说,自用呵呵),同样你也可以发不同的消息啊,有兴趣可以去看看啊,http://cn.briefcase.yahoo.com/yg_xh(是一个程序),用了后给点意见,可以给你原码。
      

  7.   

    to pitchstar:
        但是控件文本窗没有hwnd(用spy都无法得到)
      

  8.   

    to yg_xh:
        我们需要的是操作网页上的控件,不是研究它们的刷新周期。所以似乎你的程序并不符这道题呢。
      

  9.   

    要向窗口发送消息,必须知道该窗口的句柄或指针,用FindWindow()就可以了
      

  10.   

    要向窗口发送消息,必须知道该窗口的句柄或指针,用FindWindow()就可以了 
    然后用SendMessage()
      

  11.   

    应该是 com 来解决问题,可惜我不会
      

  12.   

    给你一段COM技术实现的例程,是抄来的,自己琢磨一下吧。
    CFrameWnd * pFrame=(CFrameWnd *)(AfxGetMainWnd());
    ASSERT_VALID(pFrame); CHtmlView *pHtmlView=(CHtmlView *)(pFrame->GetActiveView());
    ASSERT_VALID(pHtmlView); Idispatch *pDisp=pHtmlView->GetHtmlDocument(); if(pDisp != NULL)
    {
    IHTMLDocument2 * pHTMLDocument2;
    HRESULT hr; hr = pDisp->QueryInterface(IID_IHTMLDocument2,
                   (void**)&pHTMLDocument2); if(hr==S_OK)
    {
    IHTMLElementCollection * pColl = NULL;
    hr=pHTMLDocument2->get_anchors(&pColl);

    if(hr==S_OK&&pColl!=NULL)
    {
    LONG nElem;
    hr=pColl->get_length(&nElem);

    if(hr==S_OK)
    {
    for(long I=0;I<nElem;I++)
    {
    _variant_t vIndex(I);
    _variant_t vName=vIndex; Idispatch *pDisp2;
    hr=pColl->item(vName,vIndex,&pDisp2);
    if(hr==S_OK)
    {
    IHTMLAnchorElement * pAnchElem;
    hr=pDisp->QueryInterface(IID_IHTMLAnchorElement,(void**)&pAnchElem);
    if(hr==S_OK)
    {
    BSTR bstrRef=0;
    pAnchElem->get_href(&bstrRef); Cstring strLink(bstrRef); if(!strLink.IsEmpty())
    {
    m_lbLinkList.AddString(strLink);
    SysFreeString(bstrRef);
    pAnchElem->Release();
    }
    pDisp2->Release();
    }
    }
    }
    pColl->Release();
    }
    pHTMLDocument2->Release();
    }
              pDisp->Release();
    }
    }
      

  13.   

    补充:
    上面的代码不是针对你的问题的,你把上面的代码看懂了,就会编写自己的代码了。
    另外,提示一下,用Visual Studio的工具object viewer查IE object的Interface。
    肯定可以实现的。
      

  14.   

    to 阿轩:
        我正好找了一些有关于COM的书来看了看,你的代码很有启发!谢谢你.
      

  15.   

    to axuan:
        有一点不太明白,这么多的if(hr==S_OK)一层一层地套进去有什么用?