希望能得到完整的例子 谢谢!!!

解决方案 »

  1.   

    hTarWnd 是要取得的IE窗口的句柄
    ////////////////
    #include <mshtml.h>#include <comdef.h>BOOL GetHtmlText(HWND hTarWnd ,CString &strText)
    {
    LPDISPATCH lpDispatch;
    HRESULT hr;
    IShellWindows* pSWnd;// IClassFactory* pCF = NULL;
    // hr = CoGetClassObject(CLSID_ShellWindows, CLSCTX_INPROC_SERVER, NULL, IID_IClassFactory, (VOID**)&pCF); 
    // if(FAILED(hr))
    // return FALSE;
    //
    // hr = pCF->CreateInstance(NULL, IID_IWebBrowser, (LPVOID*)&pSWnd);
    // pCF->Release(); 
    // if(FAILED(hr))
    // return FALSE;// HWND hForeWnd = GetForegroundWindow();
    if(FAILED(hr = CoCreateInstance(CLSID_ShellWindows,
    NULL,
    CLSCTX_SERVER, 
    IID_IShellWindows, 
    (LPVOID*)&pSWnd)))
    {
            TRACE(_T("Failed to create Instance :-( ")) ;
    return FALSE;
    } long lIEWndCnt;
    IWebBrowserApp* pWBrowserApp = NULL;
    if(FAILED(pSWnd->get_Count(&lIEWndCnt)))
    {
    pSWnd->Release();
    return FALSE;
    } for(long l = 0; l < lIEWndCnt; l++)
    {
    VARIANT index;
    V_VT(&index) = VT_I4;
    V_I4(&index) = l;
    lpDispatch = NULL;
    if(FAILED(hr = pSWnd->Item(index, &lpDispatch)))
    {
    continue;
    }
    if(!lpDispatch)
    {
    continue;
    } if(FAILED(hr = lpDispatch->QueryInterface(IID_IWebBrowserApp, (LPVOID*)&pWBrowserApp)))
    {
    continue;
    } long hIEWnd;
    if(SUCCEEDED(hr = pWBrowserApp->get_HWND(&hIEWnd)))
    {
    if((HWND)hIEWnd == hTarWnd)
    {
    break;
    }
    }
    pWBrowserApp->Release();
    pWBrowserApp = NULL;
    }
    pSWnd->Release(); if(pWBrowserApp)
    {//找到了IE窗口
    if(FAILED(hr = pWBrowserApp->get_Document(&lpDispatch)))
    {
    return FALSE;
    } IHTMLDocument2* pHTMLDoc;
    if(FAILED(hr = lpDispatch->QueryInterface(IID_IHTMLDocument2, (LPVOID*)&pHTMLDoc)))
    {
    return FALSE;
    }

    BSTR bstrText ;
    //CString strText; hr = pHTMLDoc->get_title(&bstrText); 
    if (SUCCEEDED(hr))
    {
    _bstr_t bstr(bstrText, false);
    strText = (LPCTSTR)bstr;
    } IHTMLElement *pElement;
    hr = pHTMLDoc->get_body((IHTMLElement **)&pElement);
    // hr = pHTMLDoc->get_activeElement((IHTMLElement **)&pElement);
    if(SUCCEEDED(hr))
    {
    hr = pElement->get_innerText(&bstrText);
    // hr = pElement->get_innerHTML(&pText);
    // hr = pElement->get_outerHTML(&pText);
    if(SUCCEEDED(hr))
    {
    _bstr_t bstr(bstrText, false);
    strText += (LPCTSTR)bstr;
    // CFile fileText("D:\\IEText.txt", CFile::modeCreate | CFile::modeWrite);
    // fileText.WriteHuge(LPCTSTR(strText), strText.GetLength());
    // fileText.Close();
    }
    pElement->Release();
    }
    pHTMLDoc->Release();
    pWBrowserApp->Release();
    } return TRUE;
    }
      

  2.   

    得到IE窗口的句柄:
    HWND hWndIE = FindWindow("IEFrame",NULL);
      

  3.   

    horizon_tj(地平线):我的目的是要拦截也面文本拷贝或者页面文本选中 能告诉我你的函数怎么用吗
      

  4.   

    file/save as
    也可以COPY你的文档的
    呵呵
      

  5.   

    那个可以加密控制 目的是只可以看不可以COPY文本
      

  6.   

    我做了一个钩子,但是不知道怎么实现用钩子钩住页面的文本选中或者文本复制事件(只钩住CTR+C是不够的) SetWindowsHookEx(??,LowLevelKeyboardProc,glhInstance,0);第一个参数到底该用什么呢 用过WH_GETMESSAGE 但是不知道怎么才能截获上述的消息 还有就是希望这个钩子只在当前的页面里面起作用 而在其他窗口中可以正常的复制或者选中
      

  7.   

    网页上的框框与windows上的不太一样,用windows的消息过程(如钩子)好象不能实现。具体怎么做,我也不知道。
    如果谁有办法,能否share。
    My E-Mail:[email protected]
      

  8.   

    我做的控件中有一个方法
    STDMETHODIMP CMYCtrl::XCmdTargetObj::Exec( 
    const GUID* pguidCmdGroup, DWORD nCmdID, DWORD nCmdExecOpt, 
    VARIANTARG* pvarargIn, VARIANTARG* pvarargOut) {
    METHOD_PROLOGUE(CMYCtrl, CmdTargetObj)  if (nCmdID == OLECMDID_STOP) 

    // ... STOP button is clicked, add YOUR own code here. 
    // We just display a message box. 
    ::MessageBox(NULL, "不许stop","CMYCtrl", MB_OK); 
    }          return S_OK; 
    }这个方法只能取得IE的STOP事件 但是其他事件却不能取到                包括OLECMDID_CUT,OLECMDID_COPY,OLECMDID_PASTE等 急切盼望高手相助!!!
      

  9.   

    WinExec()打开IE,可不可以得到句柄呀?
      

  10.   

    BOOL fEatKeystroke = FALSE;
    PKBDLLHOOKSTRUCT p = NULL;         if (nCode == HC_ACTION) 
    {
    MSG* msg = (MSG*)lParam;

    if(nCode == WM_COPY)
    fEatKeystroke = 0; p = (PKBDLLHOOKSTRUCT) lParam;
    switch (wParam) 
    {
    case WM_KEYDOWN: 
    case WM_SYSKEYDOWN:
                               case WM_KEYUP:    
    case WM_SYSKEYUP: 
    fEatKeystroke = (p->vkCode == VK_LWIN) || (p->vkCode == VK_RWIN) ||  // 屏蔽Win
    // 屏蔽Alt+Tab
    ((p->vkCode == VK_TAB) && ((p->flags & LLKHF_ALTDOWN) != 0)) ||
    // 屏蔽Alt+Esc
    ((p->vkCode == VK_ESCAPE) && ((p->flags & LLKHF_ALTDOWN) != 0)) ||
    // 屏蔽Ctrl+Esc
    ((p->vkCode == VK_ESCAPE) && ((GetKeyState(VK_CONTROL) & 0x8000) != 0))
    ||
    // 屏蔽Ctrl+C
    ((p->vkCode == '0X43') && ((GetKeyState(VK_CONTROL) & 0x8000) != 0))
    ;
    break;
    default:
    break;
          }
    }  return (fEatKeystroke ? TRUE : CallNextHookEx(glhHook,nCode,wParam,lParam));虽然截获了CTR+C事件 但是文本还是被复制了 没有起到效果啊 请高手相助!!
      

  11.   

    LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
    {
    BOOL fEatKeystroke = FALSE;
    PKBDLLHOOKSTRUCT p = NULL; if (nCode == HC_ACTION) 
    {
       p = (PKBDLLHOOKSTRUCT) lParam;
       switch (wParam) 
       {
        case WM_KEYDOWN: 
        case WM_SYSKEYDOWN:
                 case WM_KEYUP:    
        case WM_SYSKEYUP: 
        // 屏蔽Ctrl+C
        fEatKeystroke = ((p->vkCode == '0X43') && ((GetKeyState(VK_CONTROL) & 0x8000) != 0));
    break;
        default:
    break;
                }
             }  return (fEatKeystroke ? TRUE : CallNextHookEx(glhHook,nCode,wParam,lParam));
    }
    目的截获CTRL+C 虽然事件截获了 但是还是可以COPY的 没有达到效果 望高手相助!!!!!!!!!!!!!!!